【问题标题】:Hiding a view in Region Manager, when another view is shown在显示另一个视图时隐藏区域管理器中的视图
【发布时间】:2012-06-08 09:37:53
【问题描述】:

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

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

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

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

  1. 第一次调用show(persistView) 时一切正常。
  2. 如果我离开show(otherview) 将调用close()persistView。这不是必需的。

我目前的解决方案是:

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

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

我们将不胜感激。

【问题讨论】:

    标签: backbone.js marionette


    【解决方案1】:

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

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

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

    persistRegion.$el.hide()

    persistRegion.$el.show()

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

    【讨论】:

    • 请注意:region.ensureElement() 已更改为 region.ensureEl()
    • ...又改成了_ensureElement()
    【解决方案2】:

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

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

    【讨论】:

    • 您应该在答案中包含链接中的相关信息,以便在链接失效时相关信息不会丢失。
    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多