无法交换模型集合属性?

时间:2015-05-17 07:57:53

标签: javascript backbone.js backbone-collections

我是backboneJS的新手。我从www.todomvc.com下载了代码。我有一个按钮,触发下面的moveUp功能,它将移动' todo'模型上面的一步,即优先级,它在属性' order'上安排集合。我想要的是我可以交换命令'两个模型的属性。这是我认为可行的......

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);

}

但这不起作用,“订单”#39;属性在代码之前和之后保持相同。 我尝试过的事情是:

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);

代码已共享here。如果有人可以指出我错在哪里。 我也在某处读到它不会触发'更改'。帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我发现您设置新订单值的方式存在问题。

Backbone Model set需要属性哈希或属性名称和值的2个参数。来自文档:

  

在模型上设置属性的哈希值(一个或多个)。如果有的话   属性改变模型的状态,改变"改变"事件将是   触发了模型。特定属性的更改事件也是   触发,你也可以绑定到那些,例如:   change:contentset。您也可以传递个人密钥   和价值观。

因此,您可以使用以下两种方式之一致电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

{{1}}