2013-07-08 41 views
1

我有我從服務器獲取,然後呈現視圖的模型。我應該使用模型的更改事件將呼叫綁定到我的區域的show方法嗎?模型更改事件:bind Region.show或View.render?

menuModel.bind("change" , function(){ 
      leftMenuRegion.show(leftMenu); 
     }); 
     menuModel.fetch(); 

但是當模型被再次提取時會發生什麼? 或者我應該在第一時間內獲取的模式,通話地區的表演方法,然後視圖的渲染方法綁定到模型的變化事件?

menuModel.fetch(); 
    leftMenuRegion.show(leftMenu);  
    menuModel.bind("change" , function(){ 
       leftMenu.render(); 
    }); 

而且還請指點無論是在這種情況下,它是在所有可能的/推薦的實例化視圖像下面的時間去聽模型的變化事件。

initialize : function() { 
    this.bindTo(this.model, 'change', this.render, this); 
}, 

通過調用區域的顯示和有時視圖的渲染有時渲染視圖不矛盾嗎?請指教編碼標準是什麼?

回答

3

的視圖顯示模式,應該是一個聽着「變」事件。你可以(在視圖)initialize方法做到這一點:

initialize : function() { 
    this.listenTo(this.model, 'change', this.render); 
} 

你只使用區域show方法來指示什麼觀察到的區域應該顯示。你,除非你想顯示在該地區不同視圖不要再調用。

要在顯示視圖之前等待模型數據被提取,可以使用延遲,如下所述:http://davidsulc.com/blog/2013/04/01/using-jquery-promises-to-render-backbone-views-after-fetching-data/(請注意,fetch返回延遲對象,因此您可以使用該值作爲承諾)。

要有render只能調用一次,用推遲到延遲顯示該地區的視圖。然後,撥打menuModel.fetch({ silent: true });,這將防止收到數據時觸發「更改」事件。

+0

感謝大衛。我打算在上面提到的第二個選項中使用延遲。對困惑感到抱歉。但我的觀點依然存在。我無法綁定在我的初始化代碼中查看更改事件。其他方面,渲染將被調用兩次。一次是因爲獲取延期調用區域的節目,另一次是因爲更改被模型觸發。我錯過了什麼嗎? – user2562234

+0

我已經解答了我的答案。您可以使用'silent:true'選項來防止「更改」事件被'fetch'觸發 –

相關問題