我有像这样的Backbone集合
var ContactsCollection = Backbone.Collection.extend({
model: Contact,
initialize: function () {
//retrieves contacts from web service
//contactsLoaded: is the callback that gets called after
//the contacts get received
loadContacts(this.contactsLoaded);
},
contactsLoaded: function (contacts) {
for (var i = 0; i < contacts.length; i++) {
//TODO populate the collection [models][1]
}
}
});
换句话说,我想自己填充集合的models, 我怎么能这样做?
答案 0 :(得分:2)
考虑使用REST API,因为Collection#fetch应该完全符合您的要求。
var ContactsCollection = Backbone.Collection.extend({
model: Contact,
url: '', // set the URL
initialize: function () {
this.fetch();
}});
答案 1 :(得分:1)
对于Backbone集合,您无需逐个添加模型,框架将完成工作。简单地
var ContactsCollection = Backbone.Collection.extend({
model: Contact,
url: '/contacts' // whatever web service url you are using
initialize: function () {
this.fetch();
}
});
如果从服务器返回的不是JSON数组,或者它包含在某个节点中,则可以覆盖解析方法。
parse: function(response) {
// if it's like {data: [model1, model2, model3...]}
return response.data
}
答案 2 :(得分:0)
答案 3 :(得分:0)
同意@Loamhoof。您应该使用主干fetch来完成此任务。
我建议你将调用移到集合初始化方法之外。将其与其他应用程序控制流/路由器逻辑放在一起会更清楚,更方便。 Fetch将返回一个jqXHR对象实现一个promise接口。允许你做这样的事情:
var contactsCollection = new ContactsCollection({});
var p = contactsCollection.fetch();
p.done(function() { ... });
p.error(function() { ... });
p.always(function() { ... });