Backbone Marionette - 尝试更新集合中的一个模型会删除其他模型

时间:2013-07-04 17:27:05

标签: backbone.js marionette

我有一个收藏品:

var initializeUpfrontCost = function () {
    Entities.upfrontCost = new Entities.UpfrontCostCollection([
        { id: 'upfrontcost', name: 'upfrontcost', value: 0},
        { id: 'upfrontcostquote', name: 'upfrontcostquote', value: 0}


    ]);
};

我想只更新一行(模型)。我有:

   Entities.upfrontCost.set({id: 'upfrontcostquote', value:  "somevalue"});

但这似乎删除了另一行。 (触发了删除事件)。

如何更新我的收藏中的这一行?

由于

- Justin Wyllie

2 个答案:

答案 0 :(得分:1)

您需要add({row}, {index: n})在集合中插入一行(如果您不关心新行的位置,则需要add({row})),但您必须知道要删除哪一行,所以你可以致电remove({oldrow})

您可以使用add;

找到_.indexOf(collection, {row})来电的索引

如果add&行不够好,那么你必须更新集合中的对象而不是替换它。

链接:

http://underscorejs.org/#indexOf

http://backbonejs.org/#Collection-add

答案 1 :(得分:1)

查看collection.get(id)

上的documentation

您应该可以执行以下操作:

var entity = Entities.upfrontCost.get('upfrontcostquote');

//Returns a model which you can then modify
entity.set({
   value: "some value"
});

当您在原始代码中调用collection.set()时,它会将集合的值设置为您为其提供的新输入。相反,您想要做的是将个人Model拉出集合并改为修改。