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

Cod*_*ain 8 backbone.js marionette

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

根据顶部菜单和侧边栏上的操作,我不断更改使用主区域中呈现的视图App.MainRegion.show(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

任何帮助将受到高度赞赏.

Der*_*ley 26

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

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

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

persistRegion.$el.hide()

persistRegion.$el.show()

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

  • 只是注意:region.ensureElement()已更改为region.ensureEl() (6认同)