我使用以下代码
获取数据 _.each(cardIds, function(id){
var mdc = new MdlCard({cardId: parseInt(id)});
mdc.fetch({data:{cardId: parseInt(id)}});
cards.reset(mdc);
});
cardIds包含特定列表的cardId。在我的cardview
initialize: function(){
_.bindAll(this,'render');
this.model.bind('change', this.render, this);
this.model.bind('destroy', this.remove, this);
},
render: function() {
var res = {data: this.model.toJSON(),ccId: this.model.cid}; $(this.el).html(this.template(res));
chkIds = this.model.get('checklists');
return this;
},
我将此卡模型传递给模板。但它会为每个请求获取两个对象 第一个对象包含我在创建卡片模型时定义的默认值,第二个包含db(实际上我想要的)
但是当我写这行chkIds = this.model.get('checklists');
时,它什么都不返回。请帮我在这段代码中找到问题。
答案 0 :(得分:2)
简而言之,fetch
是异步的。因此,当您首先创建模型时,它尚未从服务器获取所有值。一旦完成提取,它将使用更新的值重新呈现您的视图。我的猜测是你在创建视图后渲染视图。您可以改为等待模型更改事件触发(在完成提取之后),并且一旦提取完成它将呈现。
基于您发布的内容的另一个建议(不一定与您所看到的问题有关):您在调用fetch时不必设置data属性。 Backbone.sync的默认实现将为您执行此操作,因此mdc.fetch({data:{cardId: parseInt(id)}});
应为mdc.fetch();
希望这很有帮助 - 如果是这样的话,可以像@tkone建议那样回答