2012-02-22 76 views
7

新手使用骨干,并有一个非常简单的应用程序。基本上有ClientsClientItems。我有一个观点来显示所有的客户端,如果你点击一个客户端,你会看到他们的ClientItems。去这个ClientItems视图应该隐藏客户端视图并返回到客户端应该隐藏ClientItems。现在,在我的每个视图的render()函数中,它正在浏览集合并动态地将内容添加到页面。当我在两者之间来回切换(使用后退按钮)时,我并不需要再次完全渲染,因为所有数据都在页面中,只是隐藏起来。这个逻辑应该到哪里去?现在我在render()函数中使用它,但它感觉马虎,处理这个问题的首选方法是什么?骨干显示/隐藏渲染的视图最佳实践

回答

11

我们使用全局变量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); 
+0

看起来不错。我看到你在'initialize'中创建了视图。这是常见的事情吗?你会对收藏做同样的事吗?现在对我有意义,因为我只需要一个单一的实例,但我仍然在学习。 – Brandon 2012-02-22 17:40:08

+1

我们只是立即创建视图,所有其他的东西都是在需要时创建的。您当然可以在第一次需要时添加require.js和init视图。 – 2012-02-22 17:41:57

+0

我们正在使用App.views.current.show(),以便可以在那里执行任何有关显示的其他逻辑(可能会有其他事件侦听器发生更改) – 2013-02-06 22:40:11

5

IntoTheVoid的解决方案是好的 - 很高兴有一个地方可以隐藏/显示视图。但是,你如何激活逻辑?

根据我的经验,路由器是最好的地方。当路线改变并且调用适当的功能时,您应该更新活动的可见视图。

如果您需要同时显示多个视图,该怎么办?如果您的主视图在路由更改时总是发生更改,并且有多个附属粘滞视图,则无需担心。但是,如果它比这更复杂,可以考虑创建一个ComboView,它将所有相关视图打包成一个包含el节点的视图。这样,上述逻辑仍然有效,并且您的路由器功能不会用于管理目前可见视图的逻辑。