2012-12-04 128 views
3

我有一個應用程序,它具有單個頁面main.html,以及一些主要模板admin.html,user.html等。此應用程序目前不是主幹,只是某些部分它(慢遷移)。非骨幹模板中的視圖和重新渲染

在管理頁面中,我爲用戶提供了BB視圖等。當用戶選擇/ admin/users的路徑時,例如,然後主模板加載器(非BB)負載admin.html到main.html中一個標準位置,然後運行在usersView復位:

// pseudocode 
function() { 
    master.loadTemplate("admin.html").then(function(){usersView.reset();}); 
} 

admin.html包含多個元素,只有這是一個usersView的模板。因此,它可能看起來像:

<div id="admin-fragment"> 
    <div id="admin-users"> 
    <!-- template for usersView --> 
    </div> 
    <div id="admin-something else"> 
    </div> 
</div> 

所以,當我加載包含usersView腳本,它看起來像:

UsersView = Backbone.View.extend({ 
    el: "#admin-users" 
}); 

所有相當不錯的。這是問題。

有時,用戶可能會去這個單頁面應用程序的其他地方,然後回到/ admin/users。因此,主模板加載器加載(有時會重新加載,具體取決於)整個admin.html。但usersView是已連接到現有(現在孤立的)#admin-users的

我該如何解決這個問題?我看到兩種方式,可以使用一些想法:

  • 代替usersView.reset()當我選擇/管理/用戶,創建一個新的usersView:

    //僞 功能(){ master.loadTemplate(「admin.html」)。then(function(){usersView = new UsersView();}); }

我擔心的是性能和管理水平。

  • 以某種方式告訴現有usersView「reparent」/「reconnect」,即重新找到元素。

有沒有更好的辦法?

+0

更新對這樣的:我試圖做選項A,但後來我有經典的殭屍查看問題。而且由於這些視圖是複合材料 - 我有一個用於編輯窗體,一個用於搜索框,一個用於搜索結果,還有一個包裝器 - 做貝利的view.close()將不會有幫助,除非我走完所有的與每一個下來。真是一團糟! – deitch

回答