0

更改主干中的模型。我通常使用 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 命令来操作模型,而是使用源值。

有什么想法吗?

4

1 回答 1

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
于 2013-07-08T09:36:16.107 回答