Backbone.js 显示其他视图时,在区域管理器中隐藏视图

Backbone.js 显示其他视图时,在区域管理器中隐藏视图,backbone.js,marionette,Backbone.js,Marionette,我正在使用木偶区域管理器来管理我的视图。主要有三个区域: 1] 顶部菜单区域 2] 边栏区域 3] 主区域(不断变化的实际页面) 根据顶部菜单和侧栏上的操作,我会使用App.MainRegion.show(view)不断更改主区域中呈现的视图 现在有一个特定视图(persistView)一旦呈现,就不应该关闭,除非关闭选项卡/浏览器 当然,我不能在这里使用App.MainRegion.show(view),原因如下: 当第一次调用show(persistView)时,一切正常 如果我离开show

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

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

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

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

  • 当第一次调用
    show(persistView)
    时,一切正常
  • 如果我离开
    show(otherview)
    将调用
    persistView的
    close()
    。这不是必需的
  • 我目前的解决办法是:

  • mainRegion
    的正下方有一个名为
    persistRegion
    的新区域
  • persistView
    将始终在
    persistRegion
    中呈现
  • persistView
    onShow()中,我隐藏了
    main区域
    并显示了
    peristRegion
  • 上面的方法很管用,但我觉得很粗糙。当用户在步骤3]之后导航到任何其他视图时,我也被卡住了。现在我如何告诉
    persistView
    它应该隐藏自己并显示
    mainRegion


    非常感谢您的帮助。

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

    该对象将负责从各个视图和相关区域收听正确的事件。然后它将确定要显示和隐藏的区域

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

    persistRegion.$el.hide()

    persistRegion.$el.show()


    区域的
    $el
    属性将在区域内显示视图后或调用
    区域后可用。ensureElement()
    我建议使用木偶区域的reset()方法,而不是隐藏和显示区域的元素。 这里有一个到文件的链接 =>可以随时重置区域。这将破坏任何现有视图 并删除缓存的el。下次 区域显示视图,从中查询区域的el 大教堂

    myRegion.reset(); 在视图中重复使用面域时,这非常有用
    实例,并在单元测试中。

    请注意:region.ensureElement()已更改为region.ensureElement()…并且它再次更改为
    \u ensureElement()
    您应该在答案中包含链接中的相关信息,以便在链接死亡时不会丢失相关信息。