更新模型属性

时间:2019-01-13 20:19:43

标签: backbone.js

我正在练习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;
                    }
                });

我认为这种方法效率低下。随着收集长度的增加会发生什么。我相信有比这更好的方法。

1 个答案:

答案 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())。当然,这取决于实现。