使用Backbone的新手,有一个非常简单的应用程序。基本上有Clients
和ClientItems
。我有一个视图来显示所有客户端,如果您单击客户端,您将被带到他们的ClientItems。转到此ClientItems视图应该只隐藏Clients视图并返回到客户端应该隐藏ClientItems。现在,在每个视图的render()
函数中,它将遍历集合并动态地向页面添加内容。当我在两者之间往返时(使用后退按钮)我不需要再次完全渲染,因为页面中的所有数据都是隐藏的。这个逻辑应该在哪里?现在我在render()
函数中有它,但它感觉很草率,处理它的首选方法是什么?
答案 0 :(得分:12)
我们正在使用一个全局变量App
,它在应用程序中使用了几个常用函数:
var App = {
initialize : function() {
App.views = {
clientView : new ClientsView(),
clientItemView : new ClientsItemsView()
}
},
showView: function(view){
if(App.views.current != undefined){
$(App.views.current.el).hide();
}
App.views.current = view;
$(App.views.current.el).show();
},
...
}
然后我从应用程序的其他部分使用此App
:
App.showView(App.views.clientView);
答案 1 :(得分:5)
IntoTheVoid的解决方案很好 - 有一个地方可以隐藏/显示视图。但是你如何激活逻辑?
根据我的经验,路由器是最好的选择。当路径更改并调用相应的函数时,您应该更新活动的可见视图。
如果您需要同时显示多个视图,该怎么办?如果您的主视图在路径更改时始终发生更改,并且有多个辅助粘贴视图,则无需担心。但是如果它比这更复杂,可以考虑创建一个ComboView,它将所有相关视图整齐地打包成一个包含el
节点的视图。这样,上面的逻辑仍然有效,并且您的路由器功能不会充满逻辑,用于管理此刻可见的视图。