質問
backbone.jsを使用して、サーバーからアイテムを取得した後、コレクションで簡単なget()を実行しようとします。
フェッチは正常に動作しているようです。ただし、コレクションからIDでアイテムを取得しようとすると、モデルではなく未定義の予期しない結果が得られます。
これが私のバックボーンアイテムコードです:
Model.Scenario = Backbone.Model.extend({
defaults: function() {
return {
title: 'Scenario',
answer: null,
};
}
});
Collection.Scenarios = Backbone.Collection.extend({
model: Model.Scenario,
url: "data.php",
});
次に、ルーターメソッドでOBJ作成/フェッチを使用します。
var Router = new (Backbone.Router.extend({
routes: {
":id" : "page",
"" : "page"
},
initialize: function() {
_.bindAll(this, 'page');
this.scenarios = new Collection.Scenarios();
this.scenarios.fetch();
console.log(this.scenarios);
console.log(this.scenarios.get(1));
console.log(this.scenarios.get(2));
Backbone.history.start();
},
}))();
最後に、デバッガーにログインしているものは次のとおりです(コレクションが埋め込まれているのを見ることができます):
child
_byCid: Object
_byId: Object
1: child
2: child
3: child
4: child
7: child
10: child
11: child
12: child
13: child
14: child
15: child
16: child
17: child
18: child
19: child
20: child
21: child
22: child
23: child
26: child
27: child
28: child
__proto__: Object
length: 22
models: Array[22]
__proto__: ctor
undefined //first call to get(id)
undefined //2nd call to get(id)
私は困惑しています。長い投稿で申し訳ありませんが、私が欠けているものについての洞察に感謝します。ありがとう。
解決
私の最初の考えは、fetch()が.get()を実行するまでに返されていないということです。
しかし、あなたが投稿したことがまさに起こっていることである場合、最初のConsole.log(this.scenarios)がロードされていることを示しています。
とにかく、Console.logsを成功に入れようとすることをお勧めします。それが問題ではないことを確認するために。
私の2番目の考えは、モデルのIDが正しく設定されていないということです。
backbone.modelは、モデルのIDとしてプロパティ「ID」を使用するデフォルトで、collection.get(ID)が渡されたIDでモデルを返します。
それで、data.phpからの応答にはIDプロパティがありますか?
代わりに試してみてください:
var Router = new (Backbone.Router.extend({
routes: {
":id" : "page",
"" : "page"
},
initialize: function() {
_.bindAll(this, 'page');
this.scenarios = new Collection.Scenarios();
this.scenarios.fetch({
success: function(coll, resp) {
console.log(coll);
console.log(coll.first());
console.log(coll.last());
});
Backbone.history.start();
},
}))();
最初と最後のモデルを返し、IDの問題を写真から取り出します。
それが機能する場合、モデルはIDプロパティ(coll.first()。ID)に何を示しますか?
所属していません StackOverflow