在路由骨干j

时间:2015-05-23 17:05:13

标签: backbone.js backbone-views backbone-routing

当用户导航到其他网址时,切换到其他视图的最佳方法是什么。在角度中,有一个ng-view可以处理这个并插入相应的模板,并在其中包含所有路径。

使用css隐藏路由中的其他视图元素或破坏其他视图并插入当前视图是否更好?

修改

如果有人可以举例说明如何重新渲染视图再次导航回来并恢复之前的状态,那将会很棒。

EG。

如果您在视图中有一个复选框,用户可以选择将某个项目添加到购物车,但在中间他/她移动到其他网址然后返回,则应选中该复选框。

2 个答案:

答案 0 :(得分:0)

我将有一个带有子视图的主内容视图,并在其上调用remove,它负责清理任何子视图(首先调用remove并在层次结构树上移动)。子视图的概念并不是通过骨干免费提供的,但并不难实现。最后附上一个新的内容视图。

这可确保您可以清理并且浏览器正在使用一致的资源。

我会把它抽象成某种布局视图,它有一个内容子视图和一个像setContent(view)这样的函数来处理删除任何现有内容视图和附加新视图。

就个人而言,我会在模块中安装带有子路由器的路由器,例如:找到以" checkout"开头的路线的主路由器并将其传递给checkout模块中的子路由器,该子路由器负责附加新的内容视图。

在Backbone中,实现取决于你的好坏,取决于你做得多好;)

答案 1 :(得分:0)

始终删除视图而不是隐藏视图。如果您没有正确删除(和解除绑定)您的视图,所有绑定,处理程序和对模型/ DOM元素的引用都会徘徊不去。

根据应用程序的大小,您可以拥有一个处理布局的模块(由dominic-tobias建议),或者在路由器上有一个方法来处理这个问题。最基本的是,这个方法(让它称之为_switchView)获取一个视图并保存在currentView的一个实例上。在视图更改时,它会删除当前视图,将新视图设置为当前视图,然后将其呈现给DOM。

这样的事情:

_switchView(view) {
  this.currentView && this.currentView.remove();
  this.currentView = view;
  this.$rootEl.html(view.render().$el);
}