2013-03-14 99 views
2

我有一个模型的基本主干集合。骨干模型更新没有传播到集合

我工作的视图显示有关模型的信息,允许编辑。

在我的视图呈现中,我基于传入的'id'捕获模型。

render: function() { 

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

    // do the render... 
} 

我那么有哪些更新模型,并调用一个click事件的渲染与更新

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”可能已经在编辑之后的初始get和下一个get之间被重置,但是id仍然存在,并且它找到只有一个没有任何更新的模型。

+0

它会更好存储参考模型本身在'View.initialize(函数(参数){this.model = args.model;});'简单地调用'this.model.save( )'然后'this.render()'而不等待成功回调? – prototype 2013-03-14 16:16:11

+0

也许这会起作用,但我真的试图弄清楚为什么这个改变没有反映在集合中。我觉得我不了解有关集合/模型如何在骨干中相互作用的内容。 – 2013-03-14 17:19:36

+2

如果集合已经重置,那么预计模型的'cid'将会不同。您期望的成功回调模型的状态如何?你确定它是集合的同一个实例吗? – 2013-03-14 17:49:39

回答

1

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

这会导致模型与集合不同步以纠正问题,我需要执行的所有操作都绑定在重置上,并确保我的模型使用“新”版本更新。我将它添加到我的渲染中。

var me = this; 
this.collection.on('reset', function() { 
    me.model = this.get(me.model.id); 
};