2012-12-04 98 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

回答