2012-07-22 32 views
0

我得到了幾個不同的視圖,這些視圖大多是像(佈局組件,佈局,主視圖)構建的。骨幹:Singleton的意見?

當我現在在不同的視圖之間切換時,整個頁面必須重新渲染。

在「窗口」中至少緩存佈局視圖並重新加載它們會更好嗎?

像骨幹視圖的單身模式?

我該怎麼做? 很簡單:

window.MainLayoutView || window.MainLayoutView = new MainLayoutView({ el: 'div.main' }); 

夠了嗎?

還有什麼我需要考慮的嗎?

回答

2

是的,還有更多值得擔心的地方。如果你做這樣的事情:

window.MainLayoutView.render(); 
$(x).html(window.MainLayout.el); 
// And later... 
$(x).html(someOtherView.el); 
// And later still... 
$(x).html(window.MainLayout.el); 

,你會發現這裏面window.MainLayout您的所有事件都不見了。如果您想要緩存實例化視圖並將其交換出來,則必須安排delegateEvents調用來重新綁定視圖層次結構中的所有事件。

比較的這兩個例子的行爲,你會看到這個問題:

一般來說,您不打擾緩存視圖,只需remove他們並根據需要重新創建它們。

+0

使用.append不會導致事件引用丟失..。html實際上將html作爲一個字符串,所以你甚至沒有真正引用視圖el .. – Stephen 2012-07-22 19:50:30

+0

@Stephen:但你不是除非你先清空,否則將使用'append'替換內容,效果將是相同的(http://jsfiddle.net/ambiguous/dcFDL/)。我認爲你對'.html()'的工作原理感到困惑(http://jsfiddle.net/ambiguous/3ZJCq/)。 – 2012-07-22 20:14:02