使用Backbone.js,在从服务器获取项目后尝试对集合执行简单的get()。
Fetch似乎工作正常。但是,当我尝试从集合中获取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();
},
}))();
最后,这是记录到调试器的内容(因此您可以看到正在填充Collection):
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)
我很难过。对于这篇长篇文章感到抱歉,但我很欣赏任何有关我缺少的信息。感谢。
答案 0 :(得分:3)
我的第一个想法是,当您执行.get()时,fetch()尚未返回。
但是,如果您发布的内容正是发生的事情,那么第一个console.log(this.scenarios)显示已加载IS。
无论如何,您可能想尝试将console.logs放入成功:获取事件中,以确保不是问题。
我的第二个想法是模型的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)?