我有一个应用程序,它有一个单页 main.html,以及一些主要的模板 admin.html、user.html 等。这个应用程序目前不是主干,只是它的一些部分(迁移缓慢)。
在管理页面中,我有用户的 BB 视图等。当用户选择 /admin/users 的路径时,例如,主模板加载器(非 BB)将 admin.html 加载到 main.html 中的标准位置,然后在 usersView 上运行 reset:
// 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。
我该如何解决这个问题?我看到两种方法,可以使用一些想法:
当我选择 /admin/users 时,而不是 usersView.reset(),创建一个新的 usersView:
// 伪代码 function() { master.loadTemplate("admin.html").then(function(){usersView = new UsersView();}); }
我担心的是绩效和管理受到打击。
- 以某种方式告诉现有的 usersView “reparent”/“reconnect”,即重新找到元素。
有更好的想法吗?