当显示另一个视图时,隐藏区域管理器中的视图

时间:2012-06-08 09:37:53

标签: backbone.js marionette

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

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

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

当然,由于以下原因,我无法使用App.MainRegion.show(view)

  1. 第一次调用show(persistView)时一切正常。
  2. 如果我离开,show(otherview)将致电close()的{​​{1}}。这不是必需的。
  3. 我目前的解决方案是:

    1. persistView下面有一个名为persistRegion的新区域。
    2. mainRegion将始终在persistView
    3. 中呈现
    4. persistRegion的{​​{1}}中,我隐藏onShow()并显示persistView
    5. 上述作品,但我认为是非常hackish。此外,我在第3步之后卡住用户导航到任何其他视图。现在,我如何告诉mainRegion它应该隐藏自己并显示peristRegion

      任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:25)

我认为你的布局听起来不错,因为有一个区域可以保持"持久性"查看与主视图。但我不会让这两个地区相互了解或试图控制彼此的显示。相反,我会创建一个知道如何执行此操作的单独对象。

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

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

persistRegion.$el.hide()

persistRegion.$el.show()

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

答案 1 :(得分:1)

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

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