2013-03-14 102 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); 
};