Backbone.js:无法读取属性'等待#39;未定义的

时间:2013-02-20 23:22:13

标签: backbone.js

我遇到了Backbone.js的问题。

我正在使用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.Nollection节点,它只是Backbone.Models(有两个函数,但注释掉它们会给我带来同样的错误)。如此有效的空模型。这是节点的代码:

nodes = new (Backbone.Collection.extend({

    model: Node,

    store: new MemoryStore('nodes'),

}))();

从堆栈跟踪中可以看出,我也在使用 我知道memorySync已经有一年了,我正在使用Backbone.js 0.9.10,所以也许你知道我可以做些什么来修复memorySync插件。

最令我困惑的是localStorage出现在堆栈跟踪中,即使我在nodes集合中使用了MemoryStore。

修改:哦,我还将Backbone.getSyncMethod重新定义为:

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,localStorage和memorySync。

1 个答案:

答案 0 :(得分:2)

查看memorySync的来源(第78行):

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

似乎它正在尝试调用成功函数,即使未定义函数也是如此。

作为一种解决方法,您可以尝试传递一个空的成功函数:

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

对于长期使用,您可能希望向memorySync项目提交错误报告或补丁。