不能交换模型集合属性

Can't swap the model collection attributes?

本文关键字:属性 集合 模型 能交换 不能      更新时间:2023-09-26

我是backboneJS的新手。我从www.todomvc.com下载了代码。我有一个按钮,触发下面的moveUp功能,将"待办事项"模型移动一步以上,即优先考虑,它安排属性"顺序"的集合。我想要的是,我可以交换两个模型的"顺序"属性。这是我认为会工作....

moveUp: function(){
    var index = this.model.collection.indexOf(this.model);
    var nextModel = this.model.collection.at(index+1);
    var order1 = this.model.attributes.order;
    var order2 = nextModel.attributes.order;
    this.model.set('order', order2);
    this.model.collection.models[index + 1].set('order', order1);
}

但这不起作用,'order'属性在代码前后保持不变。我尝试过的事情是:

model.set({'order',order1});

model.set('order',order1);

var order = _.clone(model.get('order'));
model.set(order, order1);

var map = {};
map['order'] = value;
this.model.set(map);

代码在这里共享。如果有人能指出我错在哪里。此外,我在某处读到,它不会引发"改变"。

我发现你设置新订单值的方式有问题。

主干模型集需要属性的散列或属性名和值的两个参数。来自文档:

在模型上设置属性的散列(一个或多个)。如果有属性改变模型的状态,一个"改变"事件就会发生在模型上触发。对于特定属性的更改事件也是如此触发,你也可以绑定它们,例如:change:titlechange:content。您也可以传递单个密钥和价值观。

因此,您可以使用以下两种方式中的任何一种调用set:

this.model.set({'order': order2}); //note the curly brackets, so you pass a hash of attributes
this.model.set('order', order2); //note prop name and value are 2 separated arguments