8

我正在使用 Marionette 区域管理器来管理我的视图。有三个主要区域:1]顶部菜单区域2]侧边栏区域3]主区域(实际页面不断变化)

根据顶部菜单和侧边栏上的操作,我不断更改在主要区域中呈现的视图,使用App.MainRegion.show(view).

现在有一个特定的 view( persistView) ,除非关闭选项卡/浏览器,否则不应关闭它。

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

  1. show(persistView)第一次调用时,一切都很好。
  2. 如果我离开了,意志的show(otherview)召唤close()persistView这不是必需的。

我目前的解决方案是:

  1. persistRegion在 .下方有一个名为的新区域mainRegion
  2. persistView将始终呈现在persistRegion.
  3. onShow()persistView,我隐藏mainRegion并显示peristRegion

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

任何帮助将不胜感激。

4

2 回答 2

26

我认为您的布局听起来不错,就拥有一个区域来保存“持久”视图与主视图而言。但我不会让这两个区域相互了解或试图控制彼此的显示。相反,我会创建一个知道如何执行此操作的单独对象。

该对象将负责从所涉及的各种视图和区域中侦听正确的事件。然后它将确定要显示和隐藏的区域。

不过,关键在于如何显示和隐藏这些区域。您不想关闭这些区域并删除其中的视图 - 至少,不是persistRegion. 但是,您可以做的是hide()该地区的el

persistRegion.$el.hide()

persistRegion.$el.show()

在区域内显示视图后或调用 后,区域的$el属性将可用region.ensureElement()

于 2012-06-17T18:14:23.340 回答
1

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

myRegion.reset(); 这在跨视图实例和单元测试重用区域时很有用。

于 2016-02-29T18:23:57.010 回答