非骨干模板中的视图和重新渲染

时间:2012-12-04 18:20:22

标签: javascript backbone.js backbone-views

我的应用程序有一个单页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(&#34; admin.html&#34;)。then(function(){usersView = new UsersView();}); }

我担心的是绩效和管理层。

  • 以某种方式告诉现有的用户视图&#34; reparent&#34; /&#34;重新连接&#34;,即重新找到元素。

有更好的想法吗?

1 个答案:

答案 0 :(得分:0)

有关在Backbone中呈现嵌套视图的良好模式,请参阅这些帖子: