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.Models です (2 つの関数がありますが、それらをコメントアウトすると同じエラーが発生します)。実質的に空のモデルです。ノードのコードは次のとおりです。

nodes = new (Backbone.Collection.extend({

    model: Node,

    store: new MemoryStore('nodes'),

}))();

スタック トレースからわかるように、私も使用しています I know that the memorySync is a year old. Backbone.js 0.9.10 を使用しているので、memorySync プラグインを修正するために何ができるか知っているかもしれません。

私を最も混乱させているのは、nodes コレクションで MemoryStore を使用しているにもかかわらず、localStorage がスタックトレースに表示されることです。

編集:ああ、私も次のように再定義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 に答える