ÕªÒª£ºÃÔÄãÒ×ÓÃMVVM¿ò¼Üavalon£¬Æ¾½èÆä³öÉ«µÄÐÔÄܱíÏÖ£¬ÒѳÉΪ¹úÄÚ¾Ù×ãÇáÖØµÄ¿ò¼Ü¡£¿ò¼Ü×÷Õß˾ͽÕýÃÀ½«ÔÚ±¾ÎÄÉî¶ÈÆÊÎöavalon£¬´øÄãÁìÂÔavalon³öÆæÖÆÊ¤Ö®´¦¡£
Õ⼸Ä꣬¹úÄÚÔÚÔìÂÖ×ÓÉϷdz£¿ñÈÈ£¬¼¸ºõÿ¸ö´ó¹«Ë¾¶¼ÓÐ×Ô¼ºµÄ¿ò¼Ü£¬°¢ÀïµÄKissyºÍArale£¬ÌÚѶµÄJX£¬°Ù¶ÈµÄTangram£¬360µÄQWrap£¬ÉõÖÁÿ¸ö²¿ÃÅÿ¸öС×é¶¼ÓÐ×Ô¼ºµÄ¿ò¼Ü»ò¿â¡£µ«×ݹÛËüÃÇÔÚGitHubÉϼ«ÉÙµÄStar»òPull RequestÊý£¬avalonËäÖ»ÓÐ2000¶à¸öStar£¬µ«Ò²ËãºÜ³É¹¦ÁË¡£ÔÙ¿´Ò»ÏÂÓ¦ÓÃÇé¿ö£¬Ðí¶à¿ò¼ÜÖ»ÔÚ¹«Ë¾ÄÚ²¿Ê¹Óã¬avalonÔÚ°Ù¶È¡¢°¢Àï¡¢ÌÚѶ¡¢Ê¢´ó¡¢ËѺü¡¢ÒøÁª¶¼ÓÐʹÓã¬ÄÜͳ¼Æµ½¹«Ë¾´ï40¶à¼Ò£¬ÍµÍµÓõĹ«Ë¾±£ÊعÀ¼ÆÓÐ300¶à¼Ò£¨±ÈÈçijЩ¹«Ë¾Ö»½«ËüµÄÃû×ÖÓëºËÐÄ·½·¨¸Äһϣ¬ÒÔ±ÜÃâ°æÈ¨ÎÊÌ⣩£¬ÕâÊÇÌåÏÖavalon³É¹¦µÄÁíÒ»µã¡£´ó¼Ò¶à±È½Ï³çÉйúÍâ¼¼Êõ£¬¼ÓÖ®¹úÄÚ¿ò¼Ü×÷Õß¾«Á¦ÓÐÏÞ£¬¶øÎªÖ®¹±Ï×´úÂëµÄÈËÉÙÖ®ÓÖÉÙ£¬ËùÒÔ˵avalonÄÜÓнñÌìµÄ³É¼¨£¬ÊµÊô²»Òס£
»ùÓÚMVVMÊý¾Ý°ó¶¨
avalonµÄµ®ÉúÓëáÈÆðÍêÈ«ÊÇÒ»¸öÎÞÐIJåÁøµÄ½á¹û¡£avalon×îÔç·¢²¼ÓÚ2012Äê9ÔÂ15ÈÕ£¬µ±Ê±ÊÇÒÔmass FrameworkÒ»¸ö×ÓÄ£¿éµÄÐÎʽ´æÔÚ£¬ºóÀ´×÷ΪÎÒ¿ª·¢µÄµÚÈý¸ö¿ò¼Ü¶ÀÁ¢Á˳öÀ´¡£
Mass FrameworkµÄʧ°ÜÈÃÎÒÉîÉî¸Ðµ½£¬Èç¹ûûÓÐÌ«¶à´´Ðµ㣬ÓëÍâ¹újQuery¡¢MooToolsÕâЩ¿ò¼Ü½øÐÐͬÖÊ»¯¾ºÕùÖ»ÓÐËÀ·һÌõ¡£¹úÍâ¿ò¼Ü×÷Õßʱ¼ä³äÔ££¬¾«Á¦ÍúÊ¢£¬¶øÇÒ¹±Ï×ÕßÖڶ࣬¹úÄÚÐí¶à´ó¹«Ë¾µÄ¿ò¼Ü´ó¶à³Ô¿÷ÔÚÕâÒ»µãÉÏ¡£ÕýÈçÎÒÔÚ¡¶JavaScript¿ò¼ÜÉè¼Æ¡·Ò»ÊéÖÐ×ܽáµÄÈý´ó½ð¹æÖ®Ò»Ëù˵£¬±ØÐë³öÆæÖÆÊ¤¡£
ÔÚÊ¢´ó×öͨÐÐÖ¤ÆÚ¼ä£¬ÎÒ±»ÖÚ¶àÊÓͼ¸ãµÃÔÎͷתÏò£¬Í¬Ò»·ÝÊý¾Ý£¬ÒòΪÈë¿Ú²»Í¬ÍùÍùÐèÒª³ÊÏÖ²»Í¬µÄÍâ¹Û¡£È˹¤×öÊý¾ÝÓëÊÓͼµÄ·ÖÀëÈ«ÒÀÀµÓÚ±àÂëÕߵŦÁ¦£¬ÏÔÈ»·Ç³£²»¿É¿¿£¬Ò»°ãµÄǰ¶Ë»á¸øÄãдһ¶Ñif¡¢elseÓï¾ä£¬Î¬»¤ÐԷdz£²î¡£ÓÚÊÇÎÒ²»µÃ²»Ïòºó¶ËÈ¡¾¡£
ÔÚǰ¶Ë±»IE6ͳÖεÄÊ®Äê¼ä£¬ºó¶ËÒ»Ö±½ÓÊÖǰ¶ËµÄ»î¶ù£¬Òò´ËÒ»¶¨ÐèÒª·¢Ã÷ijÖÖ·½°¸À´´¦Àí¸ÃÇé¿ö¡£¹û²»ÆäÈ»£¬ÔçÔÚ2005Ä꣬΢Èí¾ÍÒѾ·¢Ã÷ÁËMVVMÕâÒ»ÉñÆ÷¡£ÆäºËÐÄÊǰ󶨡£°ó¶¨ÊÇÊÓͼÉÏÒ»Ð©ÌØÊâµÄ±ê¼Ç£¬Ëü¿ÉÒÔʵÏÖÈçjQueryµÄon¡¢css¡¢prop¡¢html¡¢text¡¢eachµÈ¹¦ÄÜ¡£Èç¹ûÔÙÍùǰ¿´£¬XSLTÆäʵҲ×öÁËÏàͬµÄÊÂÇé¡£
avalonÒ²ÊÇ»ùÓÚÕâ¸öÀíÂÛ½¨Á¢ÆðÀ´µÄ£¬ÔÚÊÓͼÉÏÌí¼ÓһЩ±ê¼Ç£¬È»ºóÔÚJavaScriptÖжԶÔÏóµÄÊôÐÔ½øÐмàÌý£¬µ±ÕâЩÊôÐÔ·¢Éú±ä»¯£¬ÒÔ¹Û²ìÕßģʽ£¬Í¨ÖªÊÓͼ½øÐбä¸ü£»ÊÓͼÉÏÒ²¿ÉÒÔ°ó¶¨Ò»Ð©Ê¼þ£¬È»ºóµ±ÕâЩʼþ±»´¥·¢Ê±£¬·´¹ýÀ´ÐÞ¸ÄÕâ¸ö¶ÔÏóµÄÌØ¶¨ÊôÐÔ£¬Õâ½ÐË«Ïò°ó¶¨¡£Èç¹û°ó¶¨×öµÃ×㹻ǿ´ó£¬Ð´ÒµÎñµÄͬѧÎÞÐèдÈκιØÓÚDOMµÄÂß¼£¬¾ÍÄÜʵÏÖÒÔǰÓÃjQuery²ÅÄܸ㶨µÄ²Ù×÷£¬Õâ½Ð×ö²Ù×÷Êý¾Ý¼´²Ù×÷DOM¡£ËùÓÐÐèÒª²Ù×÷µÄÊý¾Ý±»¼¯ÖÐÒ»Æð¹ÜÀí£¬ËüÃǺϲ¢³ÉÒ»¸ö½ÐViewModelµÄ¶«Î÷£¬¶øÔÀ´µÄHTMLÒ³ÃæÖ»×öÁËһЩÐ޸쬳ÆÖ®ÎªView£¬¶øView±¾ÉíÊÇÒ»¸ö¶¯Ì¬Ä£°å£¨Live Template£©¡£Ä£°åÊÇÒ»¸ö·Ç³£ÓÐÓõĶ«Î÷£¬Ã»ÓÐËü£¬´ó¼Ò¾Í»áÔÚJavaScript´úÂëÀïÆ´´Õ´úÂ룬»òÕßÏîÄ¿×éÿ¸öÈ˶¼Ñ¡ÓÃ×Ô¼ºµÄÄ£°å£¬Ôì³Éά»¤ÎÊÌâ¡£
ViewModelÀï·Å×ÅÐí¶àÊôÐÔÓë·½·¨£¬ÓеÄÊôÐÔÊǺó¶ËÊý¾Ý¿â²»´æÔÚµÄ×Ö·û´®£¬ÓеϹ¿ÉÄÜÒÀÀµÆäËûÊôÐÔ²ÅÄܼÆËã³ö×Ô¼ºµÄÖµ£¬ÕâЩÊôÐÔ£¬ÎÒÃÇͨ³£»á×ö³É¼ÆËãÊôÐÔ¡£ÕâЩ¶¼ÊÇMVVM×îÖØÒªµÄ¸ÅÄî¡£
³öÓÚKnockout£¬±ÈAngular¸üÒ×ÓÃ
ÔÚÎÒдavalonµÚÒ»ÐдúÂëʱ£¬Ç°¶ËMVVM¿ò¼Ü¾ÍÖ»ÓÐKnockout£¬±ËʱAngularÉÐÔÚGoogleÄÚ²¿ÔËÐУ¬µ«Íâ½ç¶ÔËüÒ»ÎÞËùÖª¡£Òò´ËavalonµÄ²ÎÕÕÎïÖ»ÓÐKnockout¡£
Knockout¼àÌýÒ»¸ö¶ÔÏóµÄÊôÐԱ䶯·Ç³£¹ÖÒ죬³É±¾Ò²·Ç³£¸ß¡£ËüʹÓÃÒ»¸ö½Ðko.observable()º¯Êý½øÐаü×°£¬»»ÑÔÖ®£¬ÔÀ´ÊÇ×Ö·û´®µÄÊôÐÔ£¬ÔÚKnockoutµÄViewModelÀï¾Í±ä³ÉÁËÒ»¸öº¯Êý£¬²»µ¥ÊÇÕâÑù£¬ËùÓÐÐèÒªµÄ¼à¿ØÒ²È«²¿±ä³ÉÁ˺¯Êý¡£ÓÐûÓпÉÄÜÈÃÔÀ´µÄ×Ö·û´®ÈÔ¼ÌÐø±£³ÖÆäÔÀ´µÄÀàÐÍÄØ£¿ÎÒÔÚIE8·¢ÏÖÁËObject.definePropertyÕâ¸öÐÂAPI£¬µ«ËüÖ»ÄÜÓ¦ÓÃÓÚDOM½Úµã£¬ÔÚÆäËüä¯ÀÀÆ÷Ï£¬ËüÄÜ½Ù³ÖÆÕͨJavaScript¶ÔÏóÊôÐԵĸ³ÖµÈ¡ÖµÐÐΪ£¬Çë¼ûÏÂÃæ´úÂë1¡£
var a = {} a.b = 1 console.log(a.b) //1 Object.defineProperty(a, "b", { get: function(){ return this.__a + 100 }, set: function(v){ return this.__a = v } }) a.b = 10 console.log(a.b)//·µ»Ø110£¬¶ø²»ÊÇ10 |
´úÂë1
ÈçºÎʹIE6~8¼æÈÝObject.defineProperty£¬±ã³ÉÁ˹ؼü¡£ÔÚ¡¶JavaScript¿ò¼ÜÉè¼Æ¡·ÖУ¬ÎÒÁоÙÁËÊýÖÖ·½·¨£¬²¢±È½ÏÁËÆäÓÅȱµã£¬×îÖÕ½¨ÒéʹÓÃVBScriptµÄSet¡¢Get¡¢LetÓï¾ä¡£ÔÚIEÏ£¬ÎÒÃÇ¿ÉÒÔÔÚJScript»ìдVBscript£¬Òò´ËÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸öVBscript¶ÔÏ󣬰ÑÐèÒª¼à¿ØµÄÊôÐÔÈ«²¿·Åµ½Õâ¸öVBScript¶ÔÏ󣬾ÍÄÜʵÏÖÏàͬµÄЧ¹û¡£µ±È»£¬ÐÔÄÜ»áÓÐËùËðʧ£¬µ«×öµ½¶ÔÊôÐÔ½Ù³ÖÕâÒ»²½£¬ÎÒÃǾͿÉÒÔͨ¹ý¹Û²ìÕßģʽͬ²½ÊÓͼÁË¡£
´ó¼ÒÏÖÔÚΨһÏëÖªµÀÊÇÕâ¶«Î÷Èݲ»ÈÝÒ×ÉÏÊÖ£¬Äܲ»ÄÜHoldס·Ç³£¸´ÔÓµÄÐèÇóÄØ£¿´ð°¸Êǿ϶¨µÄ¡£ÎÒÉϼҹ«Ë¾Ê¹ÓÃÁËAngular£¬ÔçÆÚ´úÂëÈ«Óɺó¶ËÈËԱд£¬½á¹ûÈ«²¿µôµ½¿ÓÖУ¬ÎªÁ˸²¸ÇAngularËùÓеŦÄÜ£¬avalon±»±ÆÌí¼ÓÁË´óÁ¿½üËÆAPI£¬µ«±ÈAngular¸üÒ×Óá£×ÜÖ®£¬´Ó×ʼÆð£¬avalon¾Í¸ã¶¨ÁËä¯ÀÀÆ÷¼æÈÝÐÔÓëÒ×ÓÃÐÔÕâÁ½´óÎÊÌâ¡£
´ËÍ⣬»¹ÓÐÒ»¸ö´óÎÊÌ⣬¾ÍÊÇAPIµÄÏòǰ¼æÈÝ£¬Ë׳ÆÎȶ¨ÐÔÎÊÌâ¡£AngularÊÇÒ»¸ö·´Àý£¬Ã¿Ò»¸öС°æ±¾¶¼²»Ïòǰ¼æÈÝ£¨ËüÔÚ1.08ʱ¼æÈÝIE6~8£» 1.2ʱÐèÒª´ò²¹¶¡¼æÈݾÉʽIE£» 1.3ÞðÆú¶Ô¾ÉʽIEµÄ¼æÈÝ£¬Ö±½ÓÔÚÔ´ÂëÖÐɾ³ýËùÓмæÈÝ´úÂ룬Òò´ËËùÓв¹¶¡·½°¸¶¼ÎÞÁ¦»ØÌ죬²¢ÇÒ²»Ö§³ÖÈ«¾ÖCtrlº¯Êý£¬Ðí¶àÄ£¿éÐèÒª¶ÀÁ¢ÒýÓã»1.4²»ÏòÏÂÖ§³Ö¶¯»Ä£¿é¡¡£©¡£ÔÒòºÜ¼òµ¥£¬Angular¹À¼ÆÔڹȸèÄÚ²¿ÉõÉÙʹÓ㬸ü¿ÉÄÜÖ»ÓÐÒ»Ìõ²úÆ·ÏßÔÚ×öÊÔË®£¬Òò´Ë×÷ÕߏįðÀ´ÕæÊǵÃÐÄÓ¦ÊÖ£¬Ã»Ê²Ã´ÄÚ²¿Ñ¹Á¦¡£ÏñavalonÔÚ¹«Ë¾Ó¦ÓÃÓÚÊ®¶àÌõÒµÎñÏߣ¬Åöµ½Ò»Ð©Æ¢Æø²»ºÃµÄͬѧ£¬ºÃ²»ÈÝÒ×¼ÇÍêËùÓÐAPI£¬ÉýһϾÍÒªÖØÍ·Ñ§£¬È˼ҿ϶¨²»»á·Å¹ýÄ㣬Ï´ÎÒµÎñÏ߾Ͳ»»áÓÃÄãµÄ¶«Î÷¡£´Óavalon1.2Æð£¬Ìí¼ÓµÄAPI¾ÍÁÈÁÈ¿ÉÊý£¬ËùÓÐ×¼±¸·ÏÆúµÄAPIÖ»ÊǾ¯¸æ²»»á×öʵ¼ÊµÄ²Ã¼õ¡£
µ±È»£¬ÕâÒ²ÊÇÒÀÕÌavalon°ó¶¨µÄ×㹻ǿ´ó£¬ËäÈ»avalonÒ²ÌṩÁËÀàËÆÓÚjQueryµÄcss¡¢attr¡¢data¡¢ on¡¢offsetµÈ·½·¨£¬µ«´ó¼Ò¶¼²»Óã¬ÏÖÔÚ´¿´â±ä³É¿ò¼ÜÄÚ²¿Ïû·ÑÁË¡£ÖÁÓÚÄãÒªµÄÆäËûÂÒÆß°ËÔ㹦ÄÜ£¬¶Ô²»Æð£¬Õâ²»ÊÇavalonºËÐÄ¿âÒª×öµÄÊÂÇ飬avalonÒª±£Ö¤Ð¡¶øÃÀ£¬APIÔ½ÉÙÔ½ºÃ¡£µ«ÊÇ£¬Èç¹ûÒµÎñÏßµÄͬѧµÄÈ·ºÜÐèÒªÕâЩ¹¦ÄÜÄØ£¬ÎÒÃÇÓÐOniUI£¬¸÷ÖÖ×é¼þÓ¦Óо¡ÓУ¬¹âÊDz»Í¬¹¦ÄܵÄÈÕÀú¾ÍÓÐÈý¸ö¡£
Object.definePropertyʵʱ¼à¿Ø
×îºóÊÇÐÔÄÜÎÊÌ⣬avalonʹÓÃObject.defineProperty½øÐÐʵʱ¼à¿Ø£¬²»ÏñAngularÄÇÑùʹÓÃÔà¼ì²â£¬ÔÚÐÔÄÜÉÏ¿ÉÒÔ¿¸×¡20000¸ö°ó¶¨¡£µ«ÓÉÓÚÊý¾ÝÓë¼àÌýº¯ÊýÖÁÉÙÊÇÒ»¶ÔÒ»µÄ¹ØÏµ£¬Èç¹ûÒ³ÃæÉÏÓиöÈýÖØÑ»·£¬ÇáËɾÍÄÜÔì³ÉÉÏÍò¸ö°ó¶¨¡£Òò´Ë£¬Î´À´»¹ÐèÒªÒýÈëÆäËû·½°¸¡£
Ŀǰ£¬Ïëµ½Á½¸öÓÅ»¯µã¡££¨1£©ÔÚViewModelÉϼõÉÙ¼àÌýº¯Êý£¬Object.observeÕæÊÇÉú·êÆäʱ¡££¨2£©ÔÚView¼õÉÙÈßÓàµÄDOM²Ù×÷¡£avalon¸üÐÂÊÓͼµÄ·½·¨ºÜ·½±ã£¬Ö±½Óvm.a=1£¬¾Í¿É´¥·¢Ò»´ÎÊÓͼ¸Ä¶¯¡£Òò´Ë±ØÐë¼õÉÙÒ»´ÎÊÂÎñÖжÔͬһ¸öÔªËØµÄÖØ¸´²Ù×÷£¬AngularÓÐ$applyÊÖ¶¯´¥·¢£¬avalon¿ÉÒÔÓÃ$unwatch¡¢$watch£¬µ«¶¼²»Ì«ºÃÓá£ÕâÄÑÌâ×îºó±»FacebookµÄÐÂÈñÊÓͼ¿âReact¸ã¶¨ÁË£¬ËüºÅ³ÆÊÇʹÓÃÁËÒ»ÖÖ½ÐVirtual DOMµÄ¼¼Êõ¸ã¶¨¡£ÏÔÈ»£¬Õâ´ð°¸Ã»Óб©Â¶Æäȫò£¬ÆäËûʹÓÃVirtual DOMµÄ¿â£¬ÐÔÄÜÒ²ºÜÄÑ×·µÃÉÏReact¡£
ReactΪÁËÌá¸ßÐÔÄÜ£¬Æä×îºËÐĵļÜ×ÓÊÇÆä»ùÓÚ²ã´Î½á¹¹µÄUUID¼¼Êõ¡£ÓÐÁËËü£¬²ÅÄÜʵÏÖ½ÚµãµÄ×îС»¯¸üС£±ÈÈ磬һ¸ö¶ÔÏóÀïÃæÓÐ30¸ö¼üÖµ¶Ô£¬ºóÀ´¸üиöÔÏ󣬻»³ÉÁíÍâ11¸öеļüÖµ¶Ô£¬ÕâÑùÎÒÃÇֻҪȥµôÒ³Ãæ¶à³öµÄ19¸öDOM½Úµã£¬ÔÙÐÞ¸ÄÒÑÓÐ11¸ö½ÚµãÄÚÈÝ»òÊôÐÔ¼´¿É¡£Èç¹ûÄãµÄ¿ò¼ÜʹÓþ²Ì¬Ä£°åÀ´ÊµÏÖÕâÒ»¹¦ÄÜ£¬Õâ30¸ö½ÚµãÐèÒªÖØÐ´´½¨Óë²åÈ룬ÐÔÄܿ϶¨Ò²Ã»ÓÐÕâôºÃ¡£avalonµÄÎÊÌâÔÚÓÚ£¬VBscript¶ÔÏóÖ»Òª¶àÒ»¸öÐÂÊôÐÔ»òÉÙÒ»¸öÊôÐÔ£¬¾ÍÐè»»ÉÏÒ»¸öеÄVBscript¶ÔÏó£¬ÓÚÊǶÔÓ¦ÇøÓò²»µÃ²»È«²¿»»µôнڵ㡣ĿǰavalonÖ»ÊÇÔÚÊý×éÉϽøÐÐÓÅ»¯£¬¶Ô¶ÔÏó£¨hash£©»¹ÊDZȽÏÎÞÁ¦¡£µ±È»½â¾ö·½·¨ÊÇÓе쬾ÍÊÇʹÓÃObject.getOwnPropertyDescriptor£¬µ«Õâ¶«Î÷ÊÇVBscriptÒ²¸ã²»¶¨µÄ¸ß¼¶API£¬Òò´ËÎÒÖ»ÄÜÓÃÔÚδÀ´µÄavalon2ÉÏÁË¡£µ±È»Î´À´£¬Æäʵ»¹ÓÐProxyÕâ¸ö³¬¿áµÄAPI£¬Ëü±ÈObject.defineProperty¡¢Object.observe¸üºÃÓá£ProxyÈÃJavaScriptÓµÓбÈRuby¶ÔÏó¸üΪǿ´óµÄ·´ÉäÄÜÁ¦£¬ÓÐÁËËü£¬ÕæÊÇʲôºÚħ·¨¶¼Äܸã³öÀ´£¬Ôª±à³Ì¾ÍÊÇħ·¨µÄçÍ·×Ê¢·Å£¡
¸üÊʺÏÇ¿½»»¥Ò³Ãæ
ÏÂÃæËùʾµÄ´úÂë2ÊÇÒ»¸ö¾µäµÄ±íµ¥Ê¾Àý£¬ÓÐÊäÈë¿òÓëÊäÈë¿òÖ®¼äµÄÁª¶¯£¨firstNameÓëfullName£©£¬ÊäÈë¿òÓëÎı¾Ö®¼äµÄÁª¶¯£¬CheckboxÖ®¼äµÄÁª¶¯£¨Ï·½µÄȫѡÓë·Çȫѡ¹¦ÄÜ£©¡£Í¨¹ÛËùÓдúÂ룬ûÓÐÒ»ÐвÙ×÷DOMµÄ´úÂ룬ûÓÐDOMÂß¼£¬ÒâζÒÔºóÎÒÃǽ«Ëü·Åµ½NodeJS»·¾³ÖÐ×ö¸÷ÖÖ²âÊÔ»á·Ç³£ÇáËÉ¡£´ËÍ⣬ҲûÓп´µ½Ê¼þ°ó¶¨£¬ÕâÕýÊÇMVVMµÄÉñÆæÖ®´¦¡£Ã»ÓÐʼþ°ó¶¨£¬avalonÊÇÔõô²¶×½µ½Óû§µÄ²Ù×÷ÄØ£¿Æäʵ£¬avalonҲʹÓÃÁËʼþ°ó¶¨£¬Ö»²»¹ý͵͵ÔÚ×ö£¬ÒòΪʼþ°ó¶¨´æÔÚ¸÷ÖÖ¸÷ÑùµÄ¼æÈÝÎÊÌâ¡£±ÈÈç˵£¬¹Û²ìÊäÈë¿òµÄÄÚÈݱ仯£¬ÒªÇóÿһ´ÎµÄ×Ö·û¸Ä¶¯¶¼Òª´¥·¢»Øµ÷£¬¾ÍËãÔڸ߼¶ä¯ÀÀÆ÷Ï£¬¹âƾoninputʼþÒ²²»¾¡ÍêÃÀ£¬ÐèÒªÅäºÏµ½compositionstart¡¢compositionend¡¢DOMAutoCompleteÕâЩÁ¬Öм¶JavaScript¹¤³Ìʦ¶¼ÖªÖ®ÉõÉÙµÄСÖÚʼþ¡£ÖÁÓÚIE6~9£¬¾ÍÐèÒª¸ü¶àÉñÆæµÄʼþÁË¡£Òò´Ëavalon²»´òË㽫ÕâЩ·³È˵Äϸ½Ú±©Â¶³öÀ´£¬ÕâÒ²·½±ã×Ô¼ºÒÔºó²»¶ÏÖØ¹¹ÓëÓÅ»¯¡£´ËÍ⣬MVVMÀïÃæ×îÒÐÖØµÄÉè¼ÆÄ£Ê½Êǹ۲ìÕßģʽ£¬Òò´ËÄã¿ÉÒÔ¿´µ½·Ç±íµ¥ÔªËصÄÎı¾²¿·ÖÒ²ÄÜʵÏÖÁª¶¯£¬ÕâҲ˵Ã÷£¬MVVMÊǷdz£ÊʺÏÓ¦ÓÃÓÚÄÇЩǿ½»»¥µÄÒ³ÃæÖС£
<!DOCTYPE html> <html> <head> <title>avalon 101</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="avalon.js" ></script> <script> var first = 0; var model = avalon.define({ $id: "test", firstName: "˾ͽ", lastName: "ÕýÃÀ", fullName: {//¼ÆËãÊôÐÔ set: function(val) {//setter var array = (val || "").split(" "); this.firstName = array[0] || ""; this.lastName = array[1] || ""; }, get: function() {//getter,Õâ¸ö±ØÐë´æÔÚ return this.firstName + " " + this.lastName; } }, arr: ["aaa", "bbb", "ccc", "ddd"], selected: ["bbb", "ccc"], checkAllbool: false, checkAll: function() { if (!first) { first++ return } if (this.checked) { model.selected = model.arr } else { model.selected.clear() } }, checkOne: function() { var bool = this.checked if (!bool) { model.checkAllbool = false } else { model.checkAllbool = model.selected.size() === model.arr.length } } }) </script> </head> <body> <div ms-controller="test"> <p>First name: <input ms-duplex="firstName" /></p> <p>Last name: <input ms-duplex="lastName" /></p> <p>Hello, <input ms-duplex="fullName"></p> <div>{{firstName}} | {{lastName}}</div> <ul> <li><input type="checkbox" ms-duplex-checked="checkAllbool" data-duplex-changed="checkAll"/>Select All</li> <li ms-repeat="arr" ><input type="checkbox" ms-attr-value="el" ms-duplex="selected" data-duplex-changed="checkOne"/>{{el}}</li> </ul> </div> </body> </html> |
´úÂë2
´úÂëÖ´ÐÐЧ¹ûÈçͼ1¡£

ͼ1 ±íµ¥Ê¾Àý
ÔÚÆóÒµÄÚ²¿ERP¡¢SCM¡¢CRM¡¢BRPµÈ¸÷ÖÖϵͳÖУ¬´æÔÚ´óÁ¿±í¸ñÓë±íµ¥²Ù×÷£¬Ïñͼ2ÕâÖÖ±í¸ñÈÚºÏ±íµ¥µÄGRIDÒ²·Ç³£³£¼û£¬Òò´Ë·Ç³£ÊʺÏavalon¡£

ͼ2 ±í¸ñÈÚºÏ±íµ¥µÄGrid
¹úÄÚΨһ¼æÈÝIE6µÄMVVM¿ò¼Ü
avalon×îÔç¿¿¿Ú±®Ïà´«£¬ÒòΪ¹úÄÚÄܼæÈÝIE6µÄMVVM¿ò¼ÜÒ²Ö»ÓÐavalonÒ»¿î¡£ÄÜͬʱ¸ø³öÒÆ¶¯¶Ë¡¢ºǫ́ϵͳ¡¢Chrome²å¼þ¡¢Î¢ÐŹ«¹²ºÅµÄÀý×Ó£¬Ò²Ö»ÓÐavalonÒ»¿î¡£avalonÒ²Ôø¸ã¹ý¹ú¼Ê»¯£¬Ò»¸ö°ÄÖÞµÄÅóÓÑÔÚÓᣲ»¹ý£¬avalonµÄÖØÐÄ»¹ÊǹúÄÚ£¬Ô´ÂëÀï´ó¶ÎµÄÖÐÎÄ×¢ÊÍ£¬¸ÄÆðÀ´Ï൱³ÔÁ¦£¬±ã·ÅÆúÁË¡£ÏÖÔÚ£¬ÍøÉÏ¿ÉÒÔÕÒµ½´óÁ¿avalonµÄÊÓÆµ½Ì³ÌºÍÏêϸµÄ½ÌѧÎÄÕ¡£Ëü»¹ÓÐ×Ô¼ºµÄÂÛ̳£¬ÍêȫʹÓÃavalon´î½¨¡£
Ŀǰ£¬avalonÒѾºÜÉÙÌí¼ÓÐÂÌØÐÔÁË¡£½ü¼¸Ô £¬Ò»Ö±ÔÚÐÞ¸ÄÓÉÓÚÓû§Ò»Ð©ÒâÏë²»µ½µÄʹÓ÷½Ê½¶øÒý·¢µÄBug¡£Æä´Î¾ÍÊÇÐÔÄܸĽø£¬ÎÒÓÐÒ»¸ö½Ðavalon.testµÄÏîĿרÃÅ×öÕâЩ£¬±ÜÃâÂÒÓÅ»¯µ¼Ö¸ĻµµÄ±¯¾ç¡£Ðí¶àеã×ÓÒѾ¼¯Öе½ÎÒµÄÁíÒ»¸öÏîÄ¿avalon2ÉÏÁË£¬Ëü»áÌí¼ÓÒì²½Åú´¦Àí¿ª¹Ø£¬Ö§³ÖCSS3»òJavaScript¶¯»£¬»ùÓÚ×Ô¶¨Òå±êÇ©µÄWeb Components£¬¸üºÃµØÖ§³ÖÒÆ¶¯¶Ë¡¡»»ÑÔÖ®£¬¸ü¼ÓÊÊÓ¦ÒÔºóWeb¿ª·¢µÄÐèÇó¡£
²»¹ÜÄãÃÇÓò»ÓÃavalon£¬MVVM¾ø¶ÔÊÇÄãÃÇÖµµÃÒ»ÊԵĺö«Î÷£¬Òò´ËÉè·¨ÔÚÄãÃǵÄÏîÄ¿ÖÐÌåÑéÒ»ÏÂË«Ïò°ó¶¨µÄ¸ßЧ¿ª·¢·½Ê½°É¡£
×÷Õß¼ò½é
ÖÓÇճɣ¬ÍøÃû˾ͽÕýÃÀ£¬ÊÇÖйú×îÔçÑо¿¼ÓÔØÆ÷¡¢Ñ¡ÔñÆ÷ÓëMVVMµÄÈËÖ®Ò»£¬ÖøÓС¶Javacript¿ò¼ÜÉè¼Æ¡·Ò»Êé¡£×ÔèòΪ´©ËóÓÚ¶þ´ÎÔªÓë¶þ½øÖƼäµÄħ·¨Ê¦£¬ÖÂÁ¦·¢¾ò¸÷ÖÖºÚħ·¨£¬ÌáÉýÒ»°ãǰ¶Ë¹¤³ÌʦµÄÉú²úЧÂÊ¡£
|