更改主干中的模型。我通常使用model.set或model.unset来更改某些模型值。它通常在UI上显示(绑定)。
我现在做了不同的事情,通过引用改变模型。就我所见,它的工作正常,但我想知道Backbone是否合适。
我正在对模型进行排序(基于UI更改,UI没有绑定),我正在通过引用来做。所以我没有使用骨干提供的套装。
这就是我的所作所为:
var source = this.model.get('mymodel'),
temp = source[startMove];
temp.age= endMove;
if (startMove <= endMove) {
for (var i = 1; i < endMove; i++) {
if (i >= startMove) {
source[i] = source[i + 1];
source[i].age--;
}
}
// Rest of the code
简而言之,我不是通过使用set命令来操纵模型,而是使用源值。
有什么想法吗?
答案 0 :(得分:1)
您不会触发change:*
事件,并且您的模型不会根据其验证方法进行验证。考虑这个例子:
var model = new Backbone.Model();
var o = {};
model.set('o', o);
o.hello = 1;
model.get('o').hello; // 1;
On the other hand when getting from a backbone model you will get the value stored in `model.attributes[attr]`. So actually you can also set like in your example:
var local_o = model.get('o');
local_o.hello = 2;
model.get('o').hello; // 2;
如果总是使用.set
,那么我的模型可以验证并且我的所有更改事件都会被触发;您还可以使用_.clone
对对象进行浅层关闭:
var local_o = _.clone(model.get('o'));
local_o.hello = 3;
model.get('o').hello; // 2