2

我有一个基本的骨干模型集合。

我正在使用的视图显示有关模型的信息,允许编辑。

在我的视图渲染中,我根据传入的“id”捕获模型。

render: function() {

     this.model = myCollection.get(this.options.passedInId);

     // do the render...
}

然后我有一个单击事件,它更新模型并调用渲染以使用更新重新渲染

    updateModel: function() {
        var me = this;

        this.model.set('someFlag', true);

        this.model.save(this.model.toJSON(), {
              success: function(model, resp) {
                 me.render();
              }


    }

我的问题是,当它第二次通过渲染返回时,集合中的 get 返回模型的不同实例(我可以在其上看到不同的 cId),其中不包含我更改的“someFlag”属性。因此,重新渲染视图时不会显示我的编辑。我知道可能有一种更有效的方法来处理这个问题,但我的问题是为什么会发生这种情况?从集合中获取的模型不应该包括我对该模型所做的编辑吗?

唯一的另一件事是,此示例中的“myCollection”可能已在初始获取和编辑后的下一次获取之间重置,但 id 仍然存在,它会找到一个没有任何更新的模型。

4

1 回答 1

1

我的问题是集合在 render 方法和 updateModel 方法之间被重置。

这会导致模型与集合不同步以纠正问题,我需要做的就是在重置时绑定并确保我的模型使用“新”版本进行更新。我将此添加到我的渲染中。

var me = this;  
this.collection.on('reset', function () {
     me.model = this.get(me.model.id);
};
于 2013-03-22T16:26:24.020 回答