2013-02-20 29 views
0

我困在Backbone.js的問題上。Backbone.js:無法讀取undefiend的屬性'wait'

我使用siuying's memorySync plugin來利用模型,集合及其關聯的方法,但實際上沒有將它們同步到服務器。

此代碼:

n0 = karass.nodes.create(); 
n1 = karass.nodes.create(); 
Backbone.memorySync('update', karass.nodes, {}); 

給我以下錯誤:

Uncaught TypeError: Cannot read property 'wait' of undefined backbone.js:466 
_.extend.save.options.success backbone.js:466 
Backbone.memorySync backbone.memory.js:78 
Backbone.sync backbone.localStorage.js:188 
_.extend.sync backbone.js:276 
_.extend.save backbone.js:476 
_.extend.create backbone.js:847 (anonymous function) test.js:21 

其中 nodes是節點的一個Backbone.Collection,這僅僅是Backbone.Models(具有兩個功能,但評論他們給了我同樣的錯誤)。所以有效的是一個空模型。下面是節點的代碼:你可以從堆棧跟蹤看,我還使用 我知道memorySync是一歲

nodes = new (Backbone.Collection.extend({ 

    model: Node, 

    store: new MemoryStore('nodes'), 

}))(); 

,和我使用Backbone.js的0.9.10 ,所以也許你知道我能做些什麼來修復memorySync插件。

最令我困惑的是localStorage出現在堆棧跟蹤中,即使我在節點集合中使用了MemoryStore。

編輯:包括骨幹網,本地存儲,並memorySync後

Backbone.getSyncMethod = function(model) { 
    if(model.localStorage || (model.collection && model.collection.localStorage)) { 
    return Backbone.localSync; 
    } 

    if(model.store || (model.collection && model.collection.store)){ 
    return Backbone.memorySync; 
    } 

    return Backbone.ajaxSync; 
}; 

哦,我還重新定義Backbone.getSyncMethod來。

回答

2

縱觀源memorySync(線78):

https://github.com/siuying/Backbone.memorySync/blob/master/backbone.memory.js#L78

看來它正試圖調用一個成功的功能,即使是沒有定義的。

作爲一種變通方法,你可以嘗試傳遞一個空成功的功能:

Backbone.memorySync('update', karass.nodes, { success: function() {} }); 

對於更長的長期使用,則可能需要提交錯誤報告或補丁,memorySync項目。

+0

我在稍後的localStorage的同步中添加了一些代碼。一旦我知道修復它,我會再次發佈。同時,這裏有一個鏈接:https://github.com/lowerkey/Backbone.memorySync – lowerkey 2013-02-21 17:25:17