0

我遇到了 Backbone.js 的问题。

我正在使用siuying 的 memorySync 插件来利用模型、集合及其相关方法,但实际上并没有将它们同步到服务器。

这段代码:

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 (有两个函数,但将它们注释掉会给我同样的错误)。所以实际上是一个空模型。这是节点的代码:

nodes = new (Backbone.Collection.extend({

    model: Node,

    store: new MemoryStore('nodes'),

}))();

正如您从堆栈跟踪中看到的那样,我也在使用我知道 memorySync 已有一年的历史,并且我正在使用 Backbone.js 0.9.10,所以也许你知道我可以做些什么来修复 memorySync 插件。

最让我困惑的是 localStorage 出现在堆栈跟踪中,即使我在节点集合中使用 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 之后。

4

1 回答 1

2

查看 memorySync 的源代码(第 78 行):

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

似乎它正在尝试调用成功函数,即使未定义一个。

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

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

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

于 2013-02-21T14:27:39.260 回答