我正在练习Backbone js。我有一个包含10个模型的集合。在一个模型中,我想更改2个属性。我正在使用设备本地存储。我尝试了以下代码(这只是较大脚本的一部分):
this.collection.forEach(function(user) {
if (user.get('subject') === 'Physics') {
user.set({'title': 'hdrodynamics'});
user.save();
console.log(JSON.stringify(user));
return;
}
});
我认为这种方法效率低下。随着收集长度的增加会发生什么。我相信有比这更好的方法。
答案 0 :(得分:0)
您可以使用collection.findWhere,
直接仅返回集合中与传递的属性匹配的第一个模型。
这可以减少运行的迭代次数。
您也可以使用model.save with attributes来避免进行额外的“设置”。
// Stops when matching model is found
var physicsModel = this.collection.findWhere({ subject: 'Physics' });
// might want to do some null-checking...
// Performs a set prior to POSTing, firing correct 'change' events
physicsModel.save({ title: 'hydrodynamics' });
注意:一种更有效的方法是避免在集合中查找。例如,如果该模型应通过用户的某些操作“保存”,则可以利用模型的视图来访问正确的模型(即this.model.save()
)。当然,这取决于实现。