Backbone显示/隐藏渲染视图的最佳实践

时间:2012-02-22 16:53:16

标签: javascript backbone.js

使用Backbone的新手,有一个非常简单的应用程序。基本上有ClientsClientItems。我有一个视图来显示所有客户端,如果您单击客户端,您将被带到他们的ClientItems。转到此ClientItems视图应该只隐藏Clients视图并返回到客户端应该隐藏ClientItems。现在,在每个视图的render()函数中,它将遍历集合并动态地向页面添加内容。当我在两者之间往返时(使用后退按钮)我不需要再次完全渲染,因为页面中的所有数据都是隐藏的。这个逻辑应该在哪里?现在我在render()函数中有它,但它感觉很草率,处理它的首选方法是什么?

2 个答案:

答案 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节点的视图。这样,上面的逻辑仍然有效,并且您的路由器功能不会充满逻辑,用于管理此刻可见的视图。