当我启动UserList(集合)时,我从我的API中获取所有用户(模型)。
接下来发生的是我想要阻止的事情。
然后集合似乎初始化每个模型,为每个模型触发模型的.fetch()。
为什么会发生这种情况,我不知道。我所做的只是从我的集合中调用.fetch()。
以下代码:
var UserList = Backbone.Collection.extend({
model: UserModel,
url: 'api/user',
initialize: function() {
this.fetch();
}
});
var UserModel = Backbone.Model.extend({
urlRoot: 'api/user',
defaults: {
username: '',
first_name: '',
last_name: ''
},
initialize: function() {
if(this.id) {
this.fetch();
}
}
});
如何第二次阻止.fetch()新添加的模型?我已经从初始化集合时第一个.fetch()获得了所需的所有数据。
我仍然希望UserModel默认情况下在.initialize()上使用.fetch(),因为当我尝试在Web应用中查看单个用户时。当我试图查看用户列表时,我只是不想让它这样做。
答案 0 :(得分:0)
一个技巧是测试Model.initialize
函数是否获取属性作为这样的参数:
var UserModel = Backbone.Model.extend({
...
initialize: function(attributes) {
if(Object.keys(attributes).length < 2) {
this.fetch();
}
}
...
因为当集合想要使用它获取的数据填充模型时,它会使用必须在此模型中设置的数据调用模型构造函数,并且这些数据将作为initialize
函数的参数传播/ p>
答案 1 :(得分:0)
一个选项,如果您只想在尚未提取集合时获取模型,则在获取模型初始化之前检查集合长度:
if (this.collection.length === 0) {
this.fetch();
}
如果你已经提取了你的收藏品,那么收集的长度可能是0。