2012-06-08 37 views
8

我正在使用Marionette区域管理器来管理我的视图。有三个主要区域:根据不同的顶部菜单和侧边栏上的操作 1]排名菜单区域 2]边栏区域 3]的主要区域(实际的页面,不断变化)隐藏区域管理器中的视图时,显示另一个视图

我是不断变化的观点在主要地区使用App.MainRegion.show(view)进行渲染。

现在有一个特定的视图(persistView)曾经呈现应该不关闭,除非关闭标签/浏览器。

当然,我不能使用App.MainRegion.show(view)这里FOLL原因:

  1. show(persistView)被称为第一时间一切正常。
  2. 如果我导航show(otherview)将拨打close()persistView。这不是必需的。

我目前的解决办法是:

  1. 有一个新的区域就在下面mainRegion称为persistRegion
  2. persistView将始终呈现在persistRegion中。
  3. persistViewonShow(),我隐藏mainRegion并显示peristRegion

以上的作品,但我认为这是非常的hackish。此外,我在步骤3之后被卡住]用户导航到任何其他视图。现在如何告诉persistView它应该隐藏自己并显示mainRegion

任何帮助将不胜感激。

回答

25

我认为你的布局听起来不错,就地区而言,持有“持久性”视图与主视图。但我不会让这两个地区相互了解或试图控制彼此的展示。相反,我会创建一个单独的对象,知道如何做到这一点。

此对象将负责从各种视图和区域收听正确的事件。然后它会确定要显示和隐藏的区域。

虽然,关键在于如何显示和隐藏区域。您不想关闭区域并删除其中的视图 - 至少,不是persistRegion。你可以做什么,而不是,虽然是hide()该地区的el

persistRegion.$el.hide()

persistRegion.$el.show()

该地区的$el属性将提供后视已经在区域内显示,或请致电region.ensureElement()

+6

只是一个注释:region.ensureElement()更改为region.ensureEl() –

+1

...并且它已再次更改为'_ensureElement()' – alxndr

1

我可能会建议使用来自牵线木偶区域的reset()方法,而不是隐藏和显示区域的元素。 这里有一个指向文档的链接http://marionettejs.com/docs/v2.4.4/marionette.region.html#reset-a-region =>一个地区可以在任何时候重置。这会破坏正在显示的任何现有视图 ,并删除缓存的el。下一次 区域显示一个视图时,该区域的el从 DOM中查询。

myRegion.reset(); 当区域在视图 实例和单元测试中重复使用时,这非常有用。

+1

您应该在链接中包含相关信息如果链接消失,相关信息不会丢失。 – drneel

相关问题