不能通过对象表示法访问骨干网络
我有一个包含集合的骨干模型。 当我做console.log(this.model)
时,控制台的输出是
d _changed: false _changing: false _escapedAttributes: Object _previousAttributes: Object attributes: Object cid: "c1" id: 63 itemlist: d _byCid: Object _byId: Object _onModelEvent: function () { [native code] } _removeReference: function () { [native code] } length: 5 models: Array[5] __proto__: o url: "user/63" __proto__: o
完善! 现在,我想要获取itemlist
集合,以便我可以执行this.model.itemlist.each(render(item))
。
但是当我尝试输出console.log(this.model.itemlist)
,我得到一个空的集合
d _byCid: Object _byId: Object _callbacks: Object _onModelEvent: function () { [native code] } _removeReference: function () { [native code] } length: 0 models: Array[0] parent: d __proto__: o
我不确定这是为什么,当我输出模型时,我可以看到嵌套的集合。 为什么我不能收藏? 或者我怎么去收藏。
我通过创建嵌套集合
user.fetch({ success: function(response){ user.itemlist = new itemlistcollection(response.items) } });
-----------------更新-----------------
正如@Paul帮助我发现的,视图在fetch函数完成之前被触发,所以当我从fetch
输出时我收集了这些集合,但是我没有可用的集合,这是它在哪里需要。
fetch动作发生在我的路由器中,我创建了一个函数来初始化这个对象,如果它还没有被初始化的话(不知道其他人如何做到这一点,我的路由器看起来像这样
User.Router = Backbone.Router.extend ({ routes: { "user/new": "newUser", "user/:id": "userView" "": "index" }, re_initialize: function(id){ user.fetch({ success: function(response){ user.itemlist = new itemlistcollection(response.items) } }); }, userView: function(){ console.log(user.itemlist); new User.View(user); } });
这可能是一种竞争条件,因为fetch
是一种异步方法。
您在调用this.model.itemList
之前是否确认fetch
已处理来自服务器的请求?
要确认这一点,请在提取方法中添加控制台日志消息
user.fetch({
success: function(response){
user.itemlist = new itemlistcollection(response.items)
console.log(user.itemList)
}
});
UPDATE
如果您希望视图在获取集合后渲染集合,则会触发模型上的“获取”事件,并让视图绑定到此事件以呈现集合。
以下是如何更新代码的示例
user.fetch({
success: function(response){
user.itemList = new itemlistcollection(response.items);
user.trigger('fetched');
}
});
yourView = Backbone.View.extend({
initialize: function() {
this.model.bind('fetched', this.renderList, this);
},
renderList: function() {
this.model.itemList.each(render(item));
}
}
链接地址: http://www.djcxy.com/p/53363.html
上一篇: can't access backbone collection through object notation
下一篇: Backbone.js: How to get the index of a model in a Backbone Collection?