如何使用索引骨干js在集合中设置模型

时间:2016-03-01 15:11:59

标签: model-view-controller backbone.js collections

我有一系列模特。当我更新其中一个模型时,我需要在集合中设置它。 我可以获得oldModel及其索引,但是如何将返回的(模型)设置为所需索引中的集合。 我需要这样的东西regionProofsView.collection.models.set(index,model)

这是我的代码:

       myView.on("childview:model:update", function(childView, id) {
                var fetchingModel = VialinkSignManager.request("model:update", id);
                    $.when(fetchingModel).done(function(model) {
                    var oldModel=myView.collection.get(id);
                    var index=regionProofsView.collection.models.indexOf(oldProof);
                    // here i need to set the model into the collection
                    myView.render();
                    });
          });

3 个答案:

答案 0 :(得分:0)

您只想用新型号替换旧型号吗? Backbone已经尝试为您处理这个问题。假设您没有更改ID,旧模型ID =新模型ID,那么您所要做的就是调用collection.set(model)。它将在集合中搜索具有相同ID且来自http://backbonejs.org/#Collection-set

的模型
  

如果模型已经在集合中,则其属性将被合并;

答案 1 :(得分:0)

在对骨干文档进行研究之后,我发现这种方法是一种解决方案。 在获取oldModel及其索引之后,我将其删除并在其索引中添加新模型:

myView.on("childview:model:update", function(childView, id) {
      var fetchingModel = VialinkSignManager.request("model:update", id);
      $.when(fetchingModel).done(function(model) {
        var oldModel = myView.collection.get(id);
        var index = myView.collection.models.indexOf(oldModel);
        myView.collection.remove(oldModel);
        myView.collection.add(model, {
          at: index
        });
      });

答案 2 :(得分:-1)

为什么不听取变化事件?模型更改时会触发更改事件。

 this.listenTo(this.collection, 'change', view.doSomething);