Backbone.jsÊÇʲô£¿
Bakcbone.jsÊÇÒ»¸öJavaScript MVC¿ò¼Ü£¬ÌṩÁËÁ¼ºÃµÄ´úÂë×éÖ¯ÄÜÁ¦£¬¿ÉÒÔ·½±ãµØ½«Ó¦ÓóÌÐò½âñî³É¿ÉÒÔ¸´ÓõIJ¿·Ö£¬Îª½¨Á¢´óÐ͵ĵ¥Ò³ÃæÓ¦ÓÃÌṩ¿ò¼ÜÖ§³Ö£¬Ä¿Ç°µÄ°æ±¾ÊÇ0.9.10£¨×¢£ºÏÖÔÚÒѵ½1.2.1°æ±¾£©¡£Í¨¹ý½«Ó¦ÓóÌÐò·Ö½â³ÉMVCģʽÖв»Í¬Ö°ÔðµÄÄ£¿é£¬´øÀ´ÁËÒÔϼ¸µãºÃ´¦¡£
- ½µµÍά»¤³É±¾¡£Êý¾Ý¡¢¿ØÖÆÆ÷¡¢ÊÓͼµÄ¸üж¼ÊǶÀÁ¢½øÐе쬻¥ÏàÖ®¼ä¶¼ÊÇËÉÉ¢ñîºÏµÄ¡£
- ½âñîÊý¾ÝºÍÊÓͼ£¬±ãÓÚÖ±½Ó¶ÔÒµÎñÂß¼½øÐе¥Ôª²âÊÔ¡£
- ±ãÓÚÍŶӺÏ×÷£¬¸ºÔðUI¿ª·¢ºÍÒµÎñÂß¼¿ª·¢µÄ¹¤³Ìʦ¿ÉÒÔ·Ö¹¤²¢Ðй¤×÷¡£¶ÔÓÚWebǰ¶Ë¿ª·¢À´½²£¬¸ºÔðHTMLÄ£°åºÍCSSµÄ½çÃæ¹¤³ÌʦºÍ¸ºÔðÒµÎñÂß¼µÄJavaScript¹¤³Ìʦ¿ÉÒÔÐͬ¹¤×÷¡£
Backbone.jsËãÊDZȽÏÇáÁ¿µÄMVC¿ò¼Ü£¬ËùνÇáÁ¿£¬ÊÇ˵ËüÖ»¹Ø×¢Ò»¸ö¿ò¼ÜÓ¦¸Ã¹Ø×¢µÄ×î»ù±¾µÄÊÂÇ顪¡ªÈçºÎ¸øÓ¦Ó÷ֲ㡢ÈçºÎ×éÖ¯¸÷ÖÖ¹¦ÄܵĴúÂë¡£ÖÁÓÚÔÚʵ¼Ê¿ª·¢ÖÐÐèÒªÓõ½µÄUtils»òUI×é¼þ£¬Backbone.jsÔòûÓÐÌṩÈκÎÖ§³Ö¡£µ«Backbone.jsËùÒÀÀµµÄUnderscore.jsÊÇÒ»¸ö¹¦ÄܱȽÏÈ«ÃæµÄ·ÇÇÖÈëʽ¹¤¾ßº¯ÊýÀà¿â£¬ËãÊÇÔÚUtils·½ÃæµÄÒ»¸ö²¹³ä¡£
ÇáÁ¿²¢²»Òâζ׏¦Äܱ¡Èõ¡£Ê×ÏÈ£¬Backbone.jsµÄ¾«ËèÊÇËü¶¨Òåǰ¶ËMVCµÄ·½Ê½ºÍ±àÂëÕÜѧ£¬²¢ÒÀ¾ÝÕâЩ¹æ¶¨ÁËÈçºÎÈ¥¸ø´úÂë·Ö²ã£¬Òò´ËBackbone.jsÄܹ»ÈÃǰ¶Ë¹¤³ÌÔÚ¿Éά»¤ÐÔºÍÀ©Õ¹ÐÔÉ϶¼µÃµ½ÖʵÄÌáÉý£»Í¬Ê±£¬ÓÉÓÚÆäÁ¼ºÃÇÒÒ×ÓÚÀí½âµÄ½á¹¹£¬¸÷¸öÄ£¿éÖ®¼ä¶¼ÊÇËÉÉ¢ñîºÏµÄ£¬ËäȻĿǰ¹Ù·½²¢Ã»ÓÐÌṩ¸ù¾Ýʵ¼ÊÐèÇóbuildÎļþµÄ¹¦ÄÜ£¬µ«Èç¹ûÄãÔ¸Ò⣬ÍêÈ«¿ÉÒÔ×Ô¼ºÊÖ¹¤É¾µôÔ´ÂëÖеÄBakcbone.ViewֻʹÓÃModelºÍCollection£»×îºó£¬Backbone.jsµÄÈκÎÒ»¸ö²¿·Ö¶¼ÊǷdz£ÈÝÒ×À©Õ¹µÄ¡£Òò´Ë£¬Backbone.jsµÄ¹¦ÄÜʵ¼ÊÉϷdz£Ç¿´óµÄ¡£ÏÂÃæ½«½éÉÜBackbone.jsµÄÖ÷Òª×é¼þ£¨¼Ü¹¹Èçͼ1Ëùʾ£©¡£

ͼ1 ¼Ü¹¹Í¼
Backbone.EventsºÍBackbone.Sync
Backbone.EventsºÍBackbone.SyncÁ½¸ö×é¼þÊÇBackbone.jsÒ첽ͨÐÅ¡¢Ê¼þÇý¶¯µÄ±à³ÌÄ£Ð͵Ļù´¡¡£
Backbone.jsÖÐËùÓеÄ×é¼þ¶¼Í¨¹ý_.extend()µÄ·½·¨¡°¼Ì³Ð¡±ÁËBackbone.EventsËùÌṩµÄ¹¦ÄÜ£¬¿ÉÒÔά»¤Ò»Ì××Ô¼ºµÄʼþ¶©Ôĺͻص÷ÁÐ±í¡£Í¨¹ýEvents.on(event,[callback],[context])ºÍEvents.off([event], [callback], [context])Á½¸ö·½·¨À´ÊµÏÖ¶ÔʼþµÄ¶©ÔĺÍÈ¡Ïû¶©ÔÄ¡£

ÔçÆÚ°æ±¾ÖеÄʼþ¶©ÔĺÍÈ¡Ïû¶©ÔÄÊÇͨ¹ýEvents.bind()ºÍEvents.unbind()Á½¸ö·½·¨ÊµÏֵģ¬Ä¿Ç°µÄ°æ±¾Öл¹±£ÁôÁËÕâÁ½¸ö±ðÃû·½·¨£¬µ«²»ÍƼöʹÓá£
Backbone.jsµÄËùÓÐ×é¼þ¶¼ÓÐһЩÄÚÖõÄʼþ£¬¿ÉÒÔ²éÔĹٷ½Îĵµ¡£³ýÁËÔ¤ÖÃʼþÍ⣬ͨ¹ýEvents.trigger(event,[*args])·½·¨Ò²¿ÉÒÔ·½±ãµØ´¥·¢×Ô¶¨Òåʼþ¡£

´Ó0.9°æ¿ªÊ¼£¬Backbone.EventsÌṩÁËEvents.listenTo(other,event,callback)ºÍEvents.stopListening([other],[event],[callback])Á½¸öз½·¨À´Í¨¹ýÁíÍâÒ»ÖÖÐÎʽʵÏÖʼþµÄ¶©ÔĺÍÈ¡Ïû¶©ÔÄ¡£
Óëon()ºÍof f()²»Í¬£¬ÕâÖÖ·½Ê½½«¼àÌýµÄÖ÷¶¯È¨×ª»»ÁË¡£¾Ù¸öÀý×ÓÀ´Ëµ£ºÓжÔÏóAºÍ¶ÔÏóB£¬B.on('someThingHappened',A.doSomeThing)Êǵ±¶ÔÏóBsomeThingHappenedʱºòÖª¶ÔÏóAÈ¥doSomeThing£»¶øA.listenTo(B,'someThingHappend',A.doSomeThing)ÊǶÔÏóAÖ÷¶¯È¥¶¢×ŶÔÏóB£¬µ±ËüsomeThingHappendµÄʱºòÈ¥doSomeThing¡£
µÚ¶þÖÖ·½Ê½×î´óµÄÒâÒåÊDZ䱻¶¯ÎªÖ÷¶¯£¬´Ó¶øÊµÏÖÁËIoC£¨Inversionofcontrol£¬¿ØÖÆ·´×ª£©¡£¼àÌýÕߺͱ»¼àÌýÕßÖ®¼äûÓÐÁËñîºÏ£¬Ö»Òª±»¼àÌýµÄ¶ÔÏóÄܹ»Å׳öÖ¸¶¨µÄʼþ£¬¾Í¿ÉÒԺͼàÌýÕß×éºÏÔÚÒ»Æð£¬ÉõÖÁ²»ÐèҪȥ¹ØÐı»¼àÌý¶ÔÏóµÄÀàÐÍ£¬Õâ¶Ô´úÂëµÄ¸´ÓúÍÐÐΪ³éÏóÓкܴóµÄ°ïÖú¡£ÔÚ²âÊÔ²ãÃæ£¬¿ÉÒÔÇáÒ׵ذѱ»¼àÌý¶ÔÏó»»³ÉmockµÄ²âÊÔ´úÂëÀ´Ä£ÄâÕæÊµÇé¿ö¡£
Backbone.SyncÔò½«Í¬·þÎñÆ÷µÄͨÐÅ·â×°ÁËÆðÀ´£¬µ±CollectionºÍModelÐèÒªºÍ·þÎñÆ÷ͨÐŽ»»»Êý¾Ýʱ£¬»áÈ¥µ÷ÓÃBackbone.SyncÖжÔÓ¦µÄ·½·¨²¢·¢ËÍÇëÇó£¬Èç¹û·þÎñÆ÷¶ËÖ§³ÖRESTfulAPI¾Í¿ÉÒÔ½«Õû¸öͨÐŹý³ÌÃèÊöµÃ·Ç³£ÓÅÑŲ¢Ò×ÓÚÀ©Õ¹¡£SyncµÄʵÏÖ¿ÉÒÔÊÇjQuery.ajax()µÄ·â×°£¬Ò²¿ÉÒÔÊÇÆäËûµÄÀà¿âÌṩµÄÒ첽ͨÐŹ¤¾ßµÄ·â×°¡£
Backbone.ModelºÍBackbone.Collection
Backbone.jsÖеÄModelºÍCollection¹²Í¬¹¹³ÉÁËMVCÖеÄM²ã¡£ModelµÄ±¾ÖʾÍÊÇÒ»×éÒÔkeyvalueÐÎʽ±£´æµÄÊý¾Ý£¬¿ÉÒÔͨ¹ýBackbone.Model.extend()À´¶¨Òå×Ô¼ºµÄModel¡£

ÉÏÃæµÄʾÀý´úÂëÖÐdefaultsÊôÐÔ¶¨ÒåÁËÒ»×éĬÈÏÖµ£¬µ±Model³õʼ»¯Ê±£¬Èç¹ûûÓÐÖ¸¶¨defualtsÖÐËù¶¨ÒåµÄÊôÐÔµÄÖµ£¬¾Í»áÓÃĬÈÏÖµÀ´Ìî³äModel£»initialize()·½·¨»áÔÚModel±»ÊµÀý»¯Ê±µ÷Óã¬ÓÃÀ´½øÐÐһЩ³õʼ»¯µÄ²Ù×÷£»validate()·½·¨»áÔÚModelµÄsave()»òset()·½·¨±»µ÷ÓÃʱִÐУ¬¿ÉÒÔ¸ù¾Ý¾ßÌåÐèÇó½øÐÐÀ©Õ¹¡£
ͨ¹ýModelµÄgettersºÍsetters¿ÉÒÔʵÏÖ¶ÔModelÖÐÊôÐԵĶÁд£¬²¢ÇÒµ±set()·½·¨±»µ÷ÓÃʱ£¬Model»á½«ÊôÐԱ仯µÄʼþ¹ã²¥¸øËùÓж©ÔÄÕߣ¨Í¨³£ÊÇÊÓͼ£©£¬Çý¶¯ÊÓÍ¼ÖØÐÂäÖȾ»òÆäËû¹ØÁªµÄModelµÄÊý¾Ý¸üС£
CollectionÊÇÒ»×éModelµÄ¼¯ºÏ£¬Í¨¹ýCollection¿ÉÒÔ½«Ò»×éÊý¾Ý½á¹¹ÏàͬµÄModelÓÐÐòµØ×éÖ¯ÔÚÒ»Æð£¬½øÐÐÅúÁ¿²Ù×÷ºÍ¹ÜÀíµÈ¡£Í¬Ê±£¬Collection´úÀíÁËUndersore.jsÖÐÖÚ¶àÓÃÀ´²Ù×÷CollectionµÄ¹¤¾ß·½·¨£¬ÀýÈçfind¡¢filter¡¢mapµÈ¡£
ModelºÍCollection¶¼¿ÉÒÔͨ¹ýRESTfulAPIͬ·þÎñÆ÷½øÐÐÊý¾Ý½»»»¡£
Backbone.View
Backbone.ViewÊÇ»ùÓÚBackbone.js¿ª·¢µÄWeb AppÖеĺËÐIJ¿·Ö£¬¸ºÔðÓû§½»»¥Ê¼þµÄ²¶×½ºÍ´¦Àí¡¢°ÑÓû§ÊäÈëµ¼ÏòModel»òCollection¡¢äÖȾÊÓͼ¡¢²Ù×÷DOMµÈ¡£Backbone.jsµÄÄÚ²¿ÊµÏÖÒÀÀµ$±äÁ¿£¬Òò´ËDOM²Ù×÷µÄ¿â¿ÉÒÔÔÚjQuery¡¢Zepto»òEnderµÈÖÐÑ¡Ôñ¡£´ÓĿǰµÄÇé¿öÀ´¿´£¬ÔÚ×ÀÃæä¯ÀÀÆ÷ÖУ¬Sizzle.js£¨jQuer yËùʹÓõÄSelectorEngine£©µÄÐÔÄÜ»¹ÊÇ˦¿ªZepto¼¸Ìõ½ÖµÄ£¬Òò´ËÃæÏò×ÀÃæä¯ÀÀÆ÷µÄ¿ª·¢»¹ÊÇÍÆ¼öʹÓÃjQuery£¬Òƶ¯¶Ë¿¼Âǵ½ÎļþÌå»ýµÈÒòËØÍÆ¼öʹÓÃZepto¡£
¶ÔÓÚÒ»¸öBackbone.ViewÀ´½²£¬×îÖØÒªµÄ¾ÍÊÇ$elÊôÐÔ£¬$elÊÇÒ»¸öjQuery¶ÔÏó£¨È¡¾öÓÚËù²ÉÓõÄDOM²Ù×÷Àà¿â£©£¬ÊÇÒ»¸öÊÓͼµÄ×îÍâ²ãÈÝÆ÷¡£ÈÝÆ÷Ëù²ÉÓõÄHTML±êÇ©¿ÉÒÔͨ¹ýtagNameÊôÐÔÀ´Ö¸¶¨£¬¿ÉÒÔÊÇulÒ²¿ÉÒÔÊÇheader»òÆäËûÈκαêÇ©£¬Ä¬ÈÏÇé¿öÏÂÊÇdiv¡£
ÈÝÆ÷ÄÚ²¿µÄDOMäÖȾ¿ÉÒÔͨ¹ýÄ£°åÒýÇæÀ´Íê³É¡£Underscore.js±¾ÉíÌṩÁËÒ»¸ö_.template()µÄ·½·¨£¬Òò´ËBackbone.js²»ÐèÒª¶îÍâµÄÄ£°åÒýÇæÖ§³Ö¡£µ±È»£¬Èç¹ûÓÐÌØÊâµÄÐèÇó£¬ÀýÈçºÍºó¶Ë¹²ÓÃÄ£°åÎļþ£¬Ò²¿ÉÒÔÑ¡ÓÃMustacheµÈÆäËûµÄÄ£°åÒýÇæ¡£

ÕâÑùÒ»¸öView¾Í±»äÖȾµ½½çÃæÉÏÁË¡£ÉÏÃæµÄ´úÂëÖл¹¼àÌýÁËModelµÄchangeʼþ£¬µ±Êý¾Ý·¢Éú±ä»¯Ê±£¬Çý¶¯ÊÓÍ¼ÖØÐÂäÖȾ¡£µ±ModelµÄÊý¾Ý±È½Ï·á¸»Ê±£¬Ö»ÓÐÒ»¸öÊôÐԱ仯¾ÍÖØÐÂäÖȾÕû¸öÊÓͼÏÔÈ»»á´øÀ´ÐÔÄÜÉϵÄÒþ»¼£¬Òò´ËÕâÀïµÄ×î¼Ñʵ¼ù¾ÍÊǰÑrenderµÄ¹ý³Ìbreak-down³ÉÁ£¶È¸üϸµÄƬ¶Î¡£

ÖµµÃ×¢ÒâµÄÊÇ£¬µ±Ò»¸öView²»ÔÙ±»ÐèҪʱ£¬Ò»¶¨Òª¼ÇµÃÏú»Ù£¬³ýÁËÏú»ÙDOM¶ÔÏóÍ⣬ҲҪÏú»ÙËùÓеÄʼþ¼àÌýÆ÷¡£ÔÚÖ»ÓÐEvents.on()ºÍEvents.off()µÄÄê´ú£¬ÓÉÓÚÏú»ÙViewʱÐèÒªÖðһȡÏû¶©ÔÄËùÓеÄÏûÏ¢£¬¾³£ÓÉÓÚÍü¼Ç½â³ýij¸ö°ó¶¨µ¼Ö²úÉú±»³ÆÎªGhostViewµÄÀ¬»ø¶ÔÏ󣬼ÈÎÞ·¨±»ÊÍ·ÅÒ²ÎÞ·¨±»»ØÊÕ¡£ÕâÒ²ÊÇEvents.listentTo()·½·¨´øÀ´µÄÁíÍâÒ»¸öºÃ´¦¡ª¡ªÖ»Òªµ÷ÓÃEvents.stopListening()·½·¨¼´¿É½«´Ë¶ÔÏóµÄËùÓÐʼþ¼àÌýÆ÷Ïú»Ù¡£
ËùÓеÄDOMʼþÒ²ÊÇͨ¹ý$elÀ´´úÀíµÄ£¬ÔÚBackbone.ViewÖпÉÒÔͨ¹ýÒÔÏ·½·¨À´·½±ãµØ¹ÜÀíDOMʼþ¡£

Backbone.jsµÄÄÚ²¿ÊµÏÖÀÔÚViewµÄ¹¹Ôì·½·¨Öе÷ÓÃView. initialize( )ºó½«¼ÌÐøµ÷ÓÃView.delegateEvents()·½·¨£¬Õâ¸ö·½·¨½«½âÎöeventsÊôÐÔËù¶¨ÒåµÄʼþºÍ»Øµ÷ÁÐ±í£¬²¢½«È«²¿Ê¼þ´úÀíµ½$el¶ÔÏóÉÏ¡£ÓÉÓÚʹÓõÄÊÇʼþ´úÀí£¬Ä³Ð©²»Ö§³ÖðÅݵÄDOMʼþÔò±ØÐëÁíÍâ¼àÌý£¬Èç¹ö¶¯Ìõʼþ¡£

Backbone.RouterºÍBackbone.History
RouterÊÇÓÃÀ´ÔÚURLHashºÍÌØ¶¨µÄ¶¯×÷»òÊÓͼ֮¼ä×öÓ³ÉäµÄ¡£

×îºóÒ»¾äHistory.start()ÊǸæËßBackbone.js¿ªÊ¼¶ÔURLHashµÄ±ä»¯½øÐмàÊÓ£¬Ò²¿ÉÒÔËæÊ±Í¨¹ýHistory.stop()À´Í£Ö¹¼àÊÓ¡£Í¬Ê±£¬Èç¹ûÄ¿±êƽ̨ÊÇÖ§³ÖHTML5Histor yAPIµÄ£¬ÄÇôÔÚstartʱ´«Èë{pushstate:true}µÄ²ÎÊý£¬¾Í¿ÉÒÔÈ¥µôURLÖеÄ#×Ö·û£¬¶ÔSEOÓÐÒ»¶¨°ïÖú¡£
Backbone.jsµÄÊÊÓó¡¾°
¾³£ÄÜÔÚ¸÷ÖÖ³¡ºÏÌýµ½Ç°¶Ë¹¤³ÌʦÃÇÌÖÂÛ¡°ÄãÃǵÄXXXÊÇÓÃʲô×öµÄ°¡£¿¡±¡°ÎªÊ²Ã´²»ÓÃXXX°¡£¿¡±ÕâÑùµÄÎÊÌ⡣ǰ¶ËµÄÀà¿âºÍ¿ò¼ÜÁÖÁÖ×Ü×Ü£¬ËãÔÚÒ»ÆðÊýÁ¿Ã»ÓÐһǧҲÓÐÎå°Ù£¬Òò´ËÔÚÃæ¶ÔÒ»¸öÐÂÏîĿʱÄÑÃâ»á²úÉúÑ¡Ôñ¿Ö¾åÖ¢¡£
µ«Ëµµ½µ×£¬¼¼Êõ·½°¸¶¼ÊÇÓÉÐèÇó¾ö¶¨µÄ£¬ÈκÎÒ»¸öÀà¿â»ò¿ò¼Ü¶¼ÓÐÆäÊÊÓ÷¶Î§ºÍ×î¼ÑµÄʹÓó¡¾°£¬Backbone.jsÒ²²»ÀýÍâ¡£Backbone.jsµÄ×î¼ÑʹÓó¡¾°ÊÇ´óÐ͵ĵ¥Ò³ÃæÓ¦ÓãºÍ¨¹ýRESTfulAPIͬ·þÎñÆ÷ͨÐÅ£¬È»ºó¸ù¾ÝÊý¾ÝµÄ±ä»¯À´Çý¶¯ÊÓÍ¼ÖØÐÂäÖȾ£¬Õû¸ö³ÌÐò½¨Á¢ÔÚÒ첽ͨÐźÍʼþÇý¶¯µÄ±à³ÌÄ£ÐÍÖ®ÉÏ¡£
µ¥Ò³ÃæÓ¦ÓøøÓû§´øÀ´µÄʹÓÃÌåÑéÊdzÁ½þʽµÄ¡¢Ïà¶ÔÖØÐ͵쬶ÔÓÚÆÕͨµÄWeb PageºÍÊý¾ÝÏà¶ÔÎȶ¨¡¢ÊÓͼ²»ÐèҪƵ·±ÖØÐÂäÖȾµÄ³¡¾°À´½²£¬Backbone.jsÏÔÈ»¾ÍûÓÐÓÃÎäÖ®µØÁË¡£
Backbone.jsºÍMV*²»µÃ²»ËµµÄÄǵãʶù
ËÄÊ®Äêǰ£¬Trygve Reenskaug»ùÓÚSmartalkÓïÑÔÉè¼Æ³öÁËMVCģʽ£¬¾¹ý¼¸Ê®ÄêµÄ·¢Õ¹£¬MVC³öÏÖÁËÖÚ¶àµÄÑÜÉú¡£¶øÎÒÃǽñÈÕ˵µÄMVCÔÚ²»¼ÓÌØÊâ˵Ã÷µÄÇé¿öÏ£¬Í¨³£Ö¸µÄÊÇÔÚ·þÎñÆ÷¶ËWebÓ¦Óÿª·¢ÖдóÁ¿Ê¹ÓõÄWebMVC¡£
¶ÔÓÚµäÐÍMVCģʽÀ´½²£¬ViewÊÇÎÞ·¨Ö±½Ó»ñµÃÓû§ÊäÈëµÄ£¬¶øControllerÔòÊÇÓû§ÊäÈëºÍViewÖ®¼äµÄÇÅÁº¡£µ«ÔÚä¯ÀÀÆ÷ÖУ¬View²ãµÄÔØÌåÊÇHTML£¬Óû§ÊäÈëºÍ½»»¥ÐÐΪ¶¼ÊÇ»ùÓÚHTMLµÄ£¬¶ÔʼþµÄ²¶×½¡¢ÊäÈë¶¼ÓÉä¯ÀÀÆ÷´úÀÍÁË£¬²¢ÇÒÊäÈë»áÊ×ÏȽøÈëView²ã£¬Òò´Ë¶ÔÓÚǰ¶Ë¿ª·¢À´½²£¬ÑϸñÒâÒåµÄMVCÊÇÎÞ·¨ÊµÏֵġ£
Òò´Ë£¬°üÀ¨Backbone.jsÔÚÄÚµÄJavaScript MVC¿ò¼ÜµÄʵÏÖ²¢Ã»ÓÐÑϸñ×ñÑMVCµÄ¶¨Ò壬ControllerµÄ²¿·ÖÖ°Ôð±»×ªÒƵ½ÁËView²ã¡£Bakcbone.js¶ÔÓÚǰ¶ËMVCµÄ¶¨Òå·Ç³£Ò×ÓÚÀí½â£¬µ«¶ÔÓÚû½Ó´¥¹ýMVCģʽµÄͬѧÀ´ËµÔÚ³õÆÚ»áÓÐһЩÃÔ»ó£¬ÔÒòÊÇBakcbone.jsºËÐÄ×é¼þµÄÃüÃû¡£Backbone.jsµÄºËÐÄ×é¼þ°üÀ¨Backbone.Collection¡¢Backbone.Model¡¢Backbone.ViewºÍBackbone.Router£¬¶øÔÚÔçÆÚµÄ°æ±¾ÖУ¬Backbone.Router×é¼þµÄÃû³ÆÊÇBackbone.Controller£¬ÕâºÜÈÝÒ×ÈÃÈËÖ±½Ó½«ÆäºÍMVCÈý²ãÖеÄC²ãÁªÏµÆðÀ´¡£µ«ÊÂʵÉÏ£¬Backbone.ControllerµÄ×÷ÓÃÊǸù¾ÝURLHashÀ´ÔÚ¶ÔÓ¦µÄÐÐΪºÍʼþÖÐ×ö·Óɵ쬯书ÄÜͬMVCÖеÄCÏà±ÈÒª¼òµ¥ºÜ¶à£¬Òò´ËÔÚ0.5ǰºóController¸ÄÃû½Ð×öRouterÁË¡£´ÓʵÌå´úÂëµÄ½Ç¶È¿´£¬View²ãÆäʵÊÇÄ£°å´úÂëºÍBackbone.ViewÖв¿·Ö´úÂëµÄ×ÛºÏÌ壬¶øBackbone.ViewÖÐÊ£ÓàµÄ²¿·Ö²ÅÊÇMVCģʽÖÐControllerµÄ¸ÅÄ¸ºÔð²Ù×÷ViewÒÔ¼°Êý¾ÝÔÚViewºÍModel²ãÖеÄÁ÷ת¡£
¶ÔÓÚǰ¶Ë¿ª·¢À´Ëµ£¬Óû§Ö±½ÓÃæ¶ÔµÄÒ»²ã²¢²»ÊÇController¶øÊÇView£¬Óû§ÊäÈëÒ²»áÊ×ÏȽøÈëView£¬Òò¶øÓÃMVPºÍMVVMģʽÀ´ÃèÊö¼Ü¹¹¸ü¼ÓºÏÀí¡£Ïà±ÈAngularJSµÈ¿ò¼Ü£¬Backbone.jsµÄģʽÏÔÈ»¸üÒ×ÓÚÀí½â£¬Ñ§Ï°ÇúÏß±È½ÏÆ½»º£¬ÒòΪËü²¢Ã»ÓÐÒýÈë¹ý¶àµÄÐèÒªÖØÐÂÈÏÖªºÍÀí½âµÄиÅÄî¶øÊǾ¡Á¿ÔÚ¿¿½ü´«Í³µÄMVCģʽ£¬¶ÔÓÚÒÔǰ½Ó´¥¹ýMVCģʽ¿ª·¢µÄͬѧÀ´Ëµ·Ç³£ÈÝÒ×ÉÏÊÖ£¬¶øAngularJSÖеÄDirectiveµÈ¸ÅÄÊÇÐèÒªÒ»¶¨ÈÏÖª³É±¾µÄ¡£
µ«Èç¹û´Ó¼Ü¹¹µÄ½Ç¶ÈÌÖÂÛ£¬AngularJSÆäʵÊǸüΪ´¿´â²¢¸ü½Ó½üÑϸñÒâÒåÉϵÄMVCģʽ¡£ÎªÁ˰ÑViewµÄ¹¦ÄÜÌáÉýµ½Ò»¸öÓ¦Óеĸ߶ȣ¬ÒýÈëÁËDirectiveµÄ¸ÅÄͨ¹ýÀ©Õ¹HTML±êÇ©ºÍ×Ô¶¨ÒåÊôÐÔÀ´ÃèÊöView£¬ÔÚDirectiveÖÐÀ´½âÎöÕâЩÀ©Õ¹³öÀ´µÄÄÚÈÝ£¬Àí½â³É±¾ºÍ´úÂëµÄ¸´Ôӳ̶ȶ¼ÓÐËùÌá¸ß£¬µ«View²ã¹¦ÄÜÔòµÃµ½ÁËÖʵÄÌáÉý¡£
·´¹ÛBackbone.js£¬²¢Ã»ÓÐÔÚǰ¶Ë¿ª·¢ÖÐÕæÕýµÄViewµÄÔØÌåHTMLÉÏ×öÌ«¶àÎÄÕ£¬¼´±ã²ÉÓÃÄ£°åÒýÇæÒ²½ö½öÊǰÑÊý¾ÝºÍHTML×éºÏÆðÀ´¡£µ«µÃÒæÓÚÆäÇ¿´óµÄÀ©Õ¹ÐÔ£¬¿ÉÒÔºÜÈÝÒ×½«KnockoutµÈData-binding¿ò¼Ü¼¯³É½øÀ´£¬´Ó¶øÊµÏÖMVVMµÄ¼Ü¹¹ºÍ·Ö²ã¡£ÀýÈçǰÎÄÌáµ½½«renderµÄ¹ý³ÌBreakdown¾ÍÍêÈ«¿ÉÒÔÓÃData-bindingÀ´È¡´ú£¬Ê¡µôÁËÊÖ¹¤¸üÐÂDOMµÄ·³Ëö¡£
Backbone.jsÔÚÍã¶¹¼ÔPC¿Í»§¶Ë2.0ÖеÄʵ¼ù
Íã¶¹¼ÔPC¿Í»§¶Ë2.0µÄUIÊÇÍêÈ«½¨Á¢ÔÚWebǰ¶Ë»ù´¡Éϵġ£½èÖúBackbone.js£¬Íã¶¹¼ÔPC¿Í»§¶ËÔÚ¿ª·¢´óÐ͵¥Ò³ÃæÓ¦ÓÃÖÐ×öÁË´óÁ¿µÄʵ¼ù¡£Í¨¹ýÔÚ¿Í»§¶ËÖÐÀ¦°óÒ»¸öWebkitÒýÇæ²¢¶ÔÆä½øÐÐÀ©Õ¹£¬Ê¹µÃÅÜÔÚWebviewÖеÄǰ¶Ë´úÂëÌø³öɳÏäµÄÏÞÖÆ£¬¿ÉÒÔ²Ù×÷Îļþϵͳ²¢µ÷ÓÃϵͳAPI£¬ÒÔ´ËÀ´½øÐÐ×ÀÃæÓ¦ÓõĿª·¢¡£ÕâÑù×öµÄºÃ´¦ÓÐÒÔϼ¸µã¡£
- ¼«´óÌá¸ß¿ª·¢Ð§ÂÊ£º×ÀÃæÓ¦ÓõĿª·¢ÖУ¬UI¿ª·¢Ð§ÂÊÒ»Ö±ºÜµÍ£¬µ«½èÖúHTML5ºÍCSS3µÄй¦ÄÜ£¬Webǰ¶Ë¿ÉÒÔÇáÒ×µØ×ö³ö¾«Ï¸³Ì¶ÈºÍ½»»¥ÌåÑé¶¼²»Êä×ÀÃæÓ¦ÓõÄUI£¬µ«¿ª·¢Ð§ÂʺÍά»¤³É±¾¶¼¼«´ó½µµÍ¡£
- Ò×ÓÚ¿çÆ½Ì¨£ºUIÒÀÀµÓÚWebkitÒýÇæ£¬¶øWebkitÒýÇæ±¾ÉíÊÇ¿çÆ½Ì¨µÄ£¬Òò´Ë¿ÉÒÔºÜÈÝÒ×µØÒÆÖ²µ½WebÉÏ»òÆäËû×ÀÃæÆ½Ì¨¡£
- ¿ìËÙµü´úºÍ¸Ä½ø£ºÓÉÓÚά»¤ºÍÀ©Õ¹³É±¾µÄϽµ£¬¿ÉÒÔ¿ìËٵĽ«ÔÐÍÉè¼Æ²úÆ·»¯²¢½øÐÐÑéÖ¤£¬Ìá¸ß²úÆ·µü´úºÍ¸Ä½øµÄËÙ¶È¡£
µ«Óë´Ëͬʱ£¬ÓÃWebǰ¶Ë¼¼Êõ¿ª·¢×ÀÃæÓ¦ÓÃÒ²ÒªÃæÁÙ¾Þ´óµÄÌôÕ½¡£Ê×ÏȾÍÊÇÄÚ´æÏûºÄ¡£Óû§ÔÚʹÓÃä¯ÀÀÆ÷ºÍʹÓÃ×ÀÃæÓ¦ÓÃʱµÄÐÄÀíÔ¤ÆÚÊDz»Ò»ÑùµÄ£¬¼´Ê¹Ò»¶ÎÓÐÄÚ´æÐ¹Â©ÎÊÌâµÄǰ¶Ë´úÂëÅÜÔÚä¯ÀÀÆ÷Àµ±³öÏÖÔËÐлºÂýʱ´ó²»ÁËÒ»ÏÂË¢ÐÂÒ³Ãæ£¬µ«¶Ô×ÀÃæÓ¦ÓÃÀ´½²£¬´ó¶àÊýÇé¿öÏÂûÓÐË¢ÐÂWebviewµÄ»ú»á£¬Òò´Ë±ØÐë¶ÔÄÚ´æÊµÏÖ¸ü¾«Ï¸µÄ¿ØÖÆ¡£ÓÉÓÚWebview±¾ÉíÒÀÀµÓÚGC£¬Ç°¶ËÎÞ·¨Ö÷¶¯¹ÜÀíºÍ»ØÊÕÄڴ棬Òò´Ë±ØÐë½èÖúChromeDeveloper toolsÖеÄProfilesµÈ¹¤¾ß²éÕÒ³öÏÖÄÚ´æÐ¹Â©µÄµØ·½´Ó¶ø½øÐиÄÉÆ£¬ÕâÒ²ÒÀÀµÓÚ´óÁ¿µÄ¾Ñé»ýÀÛ¡£
Æä´ÎÊÇÔËÐÐËٶȺͽçÃæÏìÓ¦ËÙ¶È¡£ÓÉÓÚWebviewÊǵ¥Ï̵߳쬵«µ¥Ò³ÃæÓ¦ÓÃÃæÁÙµÄÊÇÊý°Ù±¶ÓÚWeb PageµÄÒµÎñÂß¼¸´ÔÓ¶È£¬Í¬Ê±ÒµÎñÂß¼µÄÖ´ÐкÍUI¹²ÓÃÒ»¸öỊ̈߳¬ÈçºÎÓÅ»¯Ö´ÐÐËÙ¶ÈÒ²ÊÇÒ»¸öºÜ´óµÄÌôÕ½¡£ËäȻĿǰWebUIµÄ½çÃæÁ÷³©³Ì¶ÈÎÞ·¨ÍêÈ«´ïµ½×ÀÃæÓ¦ÓõÄˮƽ£¬µ«ÒÀÈ»ÊǺÜÓоºÕùÁ¦ÇÒÓÐÌá¸ß¿Õ¼äµÄ¡£
|