首先抱歉我可怕的英语。这是我第一次使用backbone.js。
我需要渲染一个视图来列出我的产品,但我需要在同一个地方获取带有产品系列和产品类型的2个选择()。
如何在同一视图中获取3个集合?提取是异步的,需要在成功响应时捕获模型,但是在成功方法中,我无法读取响应。我是否需要进行嵌套提取?
list: function () {
var families = new FamilyList();
families.fetch({
add: true,
data: {
'company_id': 1
},
success: function (model, response) {}
});
var types = new TypesList();
types.fetch({
add: true,
data: {
'company_id': 1
},
success: function (model, response) {}
});
var pr = new ProductList();
pr.fetch({
add: true,
data: {
'company_id': 1
},
success: function (model, response) {}
});
var json_template = {
"title_list": "Company product manager",
"types": types.models,
"families": families.models,
"products": pr.models,
};
html_content = Mustache.to_html(template_products, json_template);
$("#content").html(html_content);
}
答案 0 :(得分:0)
您必须在回调函数中渲染视图。您可以侦听集合的重置事件(在获取完成时触发)并触发渲染:
list: function () {
this.families = new FamilyList();
this.families.bind('reset', this.render, this);
this.families.fetch({
add: true,
data: {
'company_id': 1
}
});
this.types = new TypesList();
this.types.bind('reset', this.render, this);
this.types.fetch({
add: true,
data: {
'company_id': 1
}
});
this.pr = new ProductList();
this.pr.bind('reset', this.render, this);
this.pr.fetch({
add: true,
data: {
'company_id': 1
}
});
},
render: function() {
var json_template = {
"title_list": "Company product manager",
"types": this.types.models,
"families": this.families.models,
"products": this.pr.models,
};
html_content = Mustache.to_html(template_products, json_template);
$("#content").html(html_content);
}
您应该记住,只要调用list()函数,就可以实例化和绑定集合。您应该考虑使用视图的initialize()函数来创建实例并绑定到它们的事件。参见:
http://documentcloud.github.com/backbone/#Collection-constructor
使用这种方法,列表将呈现3次(每次收集一次)。要优化它,您可以跟踪已完成加载的集合数,并且只有在所有集合回调都已执行时才会呈现。