在Backbone中更新模型内的数组

时间:2015-10-07 08:21:46

标签: arrays backbone.js

我的模型中有一个数组:

accountRuleMessages: Array[1]
     0: Object
        ruleKey: "abc"
        ruleMessage: "error"

我想根据条件在我的应用程序中更新此数组,例如:

this.model.set('accountRuleMessages', { "ruleKey": "123","ruleMessage": "new message" });

但现在这样设置数组:

accountRuleMessages: Object
       ruleKey: "123"
       ruleMessage: "aa"

这是正确的方法吗?请确认!

1 个答案:

答案 0 :(得分:0)

最好在模型中使用嵌套集合而不是普通数组。

如果accountRuleMessages作为数组来自服务器,则在模型的parse方法中,您可以将其转换为Backbone.Collection

然后使用收集方法更新它很容易:

var firstMessage = this.model.get('accountRuleMessages').at(0);
firstMessage.set({
  ruleKey: "123",
  ruleMessage: "new message"
});

如果你想使用香草阵列:

var accountRuleMessages = this.model.get('accountRuleMessages');
accountRuleMessages[0] = {
  ruleKey: "123",
  ruleMessage: "new message"
}

应该可以工作,因为Array是通过引用传递的,所以你可以直接修改它。但是,您将无法执行有用的操作,例如“当消息更改时,重新呈现此消息列表”,就像您使用集合一样。

专业提示:如果您确实将其设为集合,那么最好使用将idAttribute设置为ruleKey的模型,以便您可以使用collection.get和其他好东西