聲明:本文為原創文章,如需轉載,請注明來源并保留原文連結。
<a href="http://www.cnblogs.com/nuysoft/archive/2012/03/14/2395260.html">Backbone0.9.1源碼分析分析系列</a>
<a href="http://www.cnblogs.com/nuysoft/archive/2011/11/14/2248023.html">jQuery1.6.1源碼分析系列</a>

<a href="http://www.csser.com/tools/backbone/backbone.js.html">http://www.csser.com/tools/backbone/backbone.js.html</a>
Backbone通過提供模型Models、集合Collection、視圖Veiew賦予了Web應用程式分層結構。通過以下方式實作分層結構:
模型Model綁定鍵值資料和自定義事件;
集合Colection是模型的有序或無序集合,帶有豐富的可枚舉API;
視圖View聲明事件監聽函數;
将模型、集合、視圖與服務端的RESTful JSON接口連接配接。
整個Backbone的源碼用一個自調用匿名函數包裹,可以通過閉包特性引用變量(例如 previousBackbone、slice、splice等),同時避免污染全局命名空間。
整體結構如下,還是很清晰的:
Backbone必須依賴于 Underscore.js,DOM操作和AJAX請求依賴于第三方jQuery/Zepto/ender之一,也可以通過 Backbone.setDomLibrary( lib ) 設定其他的第三方庫。
可以和任意對象合體(将方法指派到其他對象或原型上),合體後的對象可以自定義事件,提供三個方法來綁定、移除、觸發自定義事件。
是 JavaScript 應用程式的核心,包含業務資料和對業務資料的讀寫和持久化,模型的主要方法包括讀寫和持久化。
集合是模型的有序集合,可以在集合上綁定 "change" 事件,當集合中的任何模型發生變化時收到通知,集合也可以監聽 "add" 和 “remove" 事件, 從伺服器擷取資料,并能使用 Underscore.js 提供的全套方法。
為了友善,在集合中的模型上觸發的任何事件都會在集合上直接觸發。這樣就可以監聽集合中模型的指定屬性的變化。 例如:Documents.on("change:selected", ...)
集合的主要方法包括讀寫、維護和持久化。
Web應用程式通常需要為重要頁面提供可連結、收藏、可分享的 URL。 直到最近, 錨文片段(hash #page)可以被用來提供這種固定連結;同時随着 History API 的到來,錨文現在可以用于處理标準 URLs (/page)。
Backbone.Router 為用戶端頁面路由提供了許多方法,并能連接配接到指定的動作(actions)和事件(events)。對于不支援 History API 的舊浏覽器,路由器提供了優雅的回調函數并可以透明的進行 URL 片段的轉換。
頁面加載期間,當應用程式已經建立了所有的路由表,需要調用 Backbone.history.start(),或 Backbone.history.start({pushState : true}) 確定路由初始 URL。
作為全局路由器,用于處理 hashchange 或 pushState事件,比對适合的路由表,并觸發回調函數。
如果使用帶有路由表的路由器,會自動建立一個History對象,此時不要再建立一個History對象,而是使用 Backbone.history。
Backbone 會自動判斷浏覽器對 pushState 的支援,以做内部的選擇。 不支援 pushState 的浏覽器将會繼續使用基于錨點的 URL 片段。
關于官網疑惑:
如果相容 pushState 的浏覽器通路了某個 URL 錨點,将會被透明的轉換為真實的 URL。 注意使用真實的 URLs 需要 web 伺服器支援直接渲染那些頁面,是以後端程式也需要做修改。
浏覽器發起HTTP請求時并不會把錨文部分放在請求頭中,檢視 http rfc2612 也沒有發現相關的說明,保留疑問。
<a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">http://www.w3.org/Protocols/rfc2616/rfc2616.html</a>
視圖的使用相當友善,不需要判斷任何HTML、CSS,可以任意JavaScript模闆引擎內建。
通用的做法是,将界面組織成基于模型的詩句,當模型改變時視圖立即更新,而不需要重畫整個頁面。
不再需要糾結于JSON對象、查找DOM元素、手動更新HTML,隻需把視圖 render 方法綁定到模型的 change 事件,模型資料會立即顯示到UI上。
模型、集合、視圖、路由器都一個extend方法,用于擴充原型屬性和靜态屬性,建立自定義的視圖、集合、視圖、路由器類。
本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/p/3874395.html,如需轉載請自行聯系原作者