我正在使用Marionette区域经理来管理我的观点。主要有三个区域: 1]顶级菜单区域 2]边栏区域 3]主要区域(不断变化的实际页面)
根据顶部菜单和侧边栏上的操作,我会继续使用App.MainRegion.show(view)
更改在主要区域中呈现的视图。
现在有一个特定的视图(persistView
),除非选项卡/浏览器关闭,否则应该不会关闭它。
当然,由于以下原因,我无法使用App.MainRegion.show(view)
:
show(persistView)
时一切正常。show(otherview)
将致电close()
的{{1}}。这不是必需的。我目前的解决方案是:
persistView
下面有一个名为persistRegion
的新区域。mainRegion
将始终在persistView
。persistRegion
的{{1}}中,我隐藏onShow()
并显示persistView
上述作品,但我认为是非常hackish。此外,我在第3步之后卡住用户导航到任何其他视图。现在,我如何告诉mainRegion
它应该隐藏自己并显示peristRegion
?
任何帮助都将受到高度赞赏。
答案 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(); 在跨视图重复使用区域时,这非常有用 实例,以及单元测试。