2011-10-13 145 views
8

你如何取代Backbone.sync而不做任何事情?我的應用程序有一個「提交」按鈕,它將爲我執行AJAX POST,所以我不想使用Backbone.sync提供的auto-magic默認行爲。如何取代Backbone.sync,甚至沒有localStorage?

我也不想用,因爲我努力使本站兼容IE6和7

話雖這麼說,我幾乎只想骨幹什麼都不做,除了保留記錄骨幹localStorage的適配器在JS內存中(類似於Spine.js)。這甚至有可能嗎?

+0

簡單,不要用骨幹,並切換到一個簡單的跨瀏覽器的Ajax處理程序。 – 2011-10-13 04:29:05

回答

19

最簡單也是最好的方法是取代Backbone.Sync,而不是簡單地忽略它。這裏有你不想調用的方法:

類別:

  • 創建

型號:

  • 保存
  • destroy

如果您避免調用這些方法中的任何一種,您將有效地忽略Backbone.Sync並能夠編寫自己的代碼來執行AJAX調用。

當我開始時,我寫了很多Backbone代碼,沒有涉及服務器調用。沒有規則說你必須使用Backbone的所有功能。事實上,我會說相反的事實。骨幹網以這種模塊化的方式編寫,每個功能和專業領域都非常好,所以你應該只使用你實際需要的東西。

在內存中創建您的模型,請撥打setget來存儲數據。根據需要將它們填入addremove。將模型和集合傳遞給您的視圖並將其呈現給HTML DOM。只要避免調用上面列出的方法,您就不必擔心Backbone.Sync。

+0

謝謝。這非常有意義。在旁註中,如果你不使用Model.destroy(),你如何正確「銷燬」某些東西?使用collection.remove並綁定到remove事件? – kidcapital

+0

是的,那樣做。在任何有參考的地方去除引用模型,它將被垃圾收集。 –

1

我曾將this gist作爲Backbone.js教程的一部分。它僞造Backbone.sync只寫日誌,但爲了賦予其真實感,它還將模型的.cid屬性複製到它的.id屬性中,以使模型顯示爲同步。謹防在生產中使用該技術的各種不必要的後果!但我們都在這裏同意大人,對吧?

這裏沒有記錄了同樣的想法:

Backbone.sync = function(method, model, succeeded) { 
    if(typeof model.cid != 'undefined') { 
     // It's a freshly made model 
     var cid = model.cid; 
     // ..fake that it's .cid turns into a "real" .id: 
     model.unset('cid').set({id:cid}, {silent:true}); 
    } 
    // Oh yes, it all went sooo well ;-) 
    succeeded(model); 
}; 
+2

我認爲自你寫這個以來API已經發生了變化,因爲第三個參數不是回調函數。我只是'返回false',它似乎工作正常。但是你提到了「各種不需要的後果」 - 如果我的所有數據都是客戶端的,不需要持久性,那會是什麼? –