2014-07-16 57 views
1

我正在評估backbone.js作爲一個潛在的JavaScript庫用於應用程序將有幾個不同的後端:WebSocket,REST和第三方庫生產JSON。我讀過一些觀點,認爲backbone.js可以與RESTful後端一起工作,只要API是'通過本書'並遵循適當的http verbage。有人可以詳細說明這意味着什麼嗎?非RESTful後端與backbone.js

另外,它有多少麻煩,以獲得backbone.js連接到WebSockets?最後,將backbone.js模型與返回JSON的函數整合是否存在問題 - 換句話說,數據模型是否總是需要通過REST提供?

回答

5

骨幹的力量在於它具有令人難以置信的靈活性和模塊化結構。這意味着您可以使用,擴展,取出或修改Backbone的任何部分。這包括AJAX功能。

Backbone不會「關心」您在哪裏獲得您的藏品或模型的數據。它將通過提供開箱即用的「ajax」解決方案來幫助您,但如果您想使用其他方法,它不會發瘋!

這允許您查找(或寫入)任何想要處理服務器交互的插件。請看backplug.io,Google和Github。

專門爲插座有backbone.iobind

找不到插件,無後顧之憂。我可以告訴你如何寫一個(它比聽起來容易100倍)。

您需要了解的第一件事是覆蓋行爲是非常容易的。有兩種主要方式:

全球:

Backbone.Collection.prototype.sync = function() { 
    //screw you Backbone!!! You're completely useless I am doing my own thing 
} 

每個實例

var MySpecialCollection = Backbone.Collection.extend({ 
    sync: function() { 
     //I like what you're doing with the ajax thing... Clever clever ;) 
     // But for a few collections I wanna do it my way. That cool? 
}); 

而你需要知道的唯一的另一件事是,當你調用「讀取」在收集會發生什麼。這是「經書」 /「開箱即用的行爲」的行爲:

  1. collection#fetch是由用戶觸發(YOU)。 fetch會將ACTUAL抓取(ajax,套接字,本地存儲,甚至是立即返回json的函數)委託給其他某個函數(collection#sync)。無論功能是在collection.sync已經到了採取3個參數:
    1. 動作create(用於創建),動作:read(用於取入),delete(刪除),或update(用於更新)= CRUD。
    2. 方面(這個變量) - 如果你不知道這是什麼做的,不用擔心它,而不是重要的,現在
    3. 選項 - 阿凡達魔法。我們只關心1個選項,但
      • 成功:數據「準備就緒」時調用的回調函數。這是collection#fetch感興趣的回調,因爲這是當它接管並做它的事情。唯一的要求是,sync通過它第一個參數
      • response如下:實際數據就回來
    4. 現在 必須在當它這樣做獲得的數據被執行它的選項返回成功回調。這功能就是它的責任是
  2. 每當collection#sync做是做的事,collection#fetch收回了(與在成功通過了回調),並執行以下俏皮步驟:
    1. 呼叫setreset (爲了這些目的,它們大致相同)。
    2. set完成後,它會觸發收集廣播給世界的sync事件「我準備好了!
  3. 那麼set會發生什麼情況。很多東西(刪除,解析,排序,解析,刪除,創建模型,傳播更改和一般維護)。不要擔心。它的工作原理;)你需要擔心的是你如何掛鉤到這個過程的不同部分。只有你應該擔心的兩個問題(如果你用奇怪的方式包裝數據)是
    1. collection#parse解析集合。應接受來自服務器/ ajax/websocket/function/worker/whoknow的原始JSON(或其他格式),並將其轉換爲對象陣列。採用第一個參數resp(JSON),並且應該爲返回而吐出一個變異的響應。十分簡單。
    2. model#parse。與收集相同,但它需要原始對象(即,想象您遍歷collection#parse的輸出)並分割出「展開」對象。
  4. 放下電腦,去海灘,因爲你在你認爲需要的時間的1/100時完成了你的工作。

這就是所有你需要知道的,以實現任何你想要的服務器系統來代替香草「阿賈克斯請求」。

+0

要將Backbone與WebSockets集成,請嘗試https://github.com/ydaniv/backbone-ws – ydaniv