Ember.js中的多个路由器?

13

我的应用程序需要在一个叠加层中打开功能区,以便它位于当前路由之上,该路由几乎可以是应用程序中的任何其他路由。

这个功能区将有它自己的路由,因为它至少包含一个主细节视图。

处理这种情况的当前最佳实践是什么?

是否可以拥有顶层路由而不会在进入它们时拆除当前路由/视图?如果不行,并且必须让ApplicationController(或类似)处理全局可访问的叠加层,则实现该区域的路由器功能的最佳方法是什么?


也许 Ember.Namespace(http://emberjs.com/api/classes/Ember.Namespace.html)对于这种架构任务是有用的,但不确定。 - intuitivepixel
1
看到这个问题仍然没有答案,让我想到了另一种可能的方式来实现消息区域的路由功能,那就是使用Ember的StateManager:http://emberjs.com/api/classes/Ember.StateManager.html - intuitivepixel
是的,我在考虑可能需要使用一个单独的StateManager。我很快就要重新审视这个领域,如果有任何进展,我会在这里更新。 - Kevin Ansfield
1
你有没有在这方面有什么运气?我有类似的需求。 - Miguel Madero
1个回答

1
我认为你被“在叠加层中打开”的要求所困惑,并试图解决不存在的问题。
在你的应用程序中打开消息功能的另一页或将其作为覆盖层打开只是一种设计问题,应该由CSS和现有的应用程序路由处理。只需创建消息路由、控制器等。
虽然你没有说,但如果你想在那里启动单独的应用程序,最好的方法是在iframe中打开它。新的应用程序,新的生命周期等。同样,如何在另一个应用程序中显示它只是CSS的问题。

对于这个特定的功能,要求它能够在任何其他路由的__顶部__打开,因此不可能只是转换到现有路由器上的路由。将其视为一个复杂的模态框,它有自己的“路由”,但在URL中根本没有表示。我已经从问题中删除了“消息传递”措辞,因为我认为这可能会让事情变得混乱。 - Kevin Ansfield
@KevinAnsfield 现在看起来你需要一个视图 - http://emberjs.com/guides/views/。你可以将它插入到应用程序的许多地方(不同的路由)中。它有自己的控制器,可以将属性绑定到嵌入它的控制器/模板中,因此您可以在整个应用程序中重复使用它。 - Wojciech Bednarski
我理解这部分内容,但我在如何将多个控制器和视图绑定在一个视图中、如何跟踪该视图内的状态以及如何跟踪视图的可见/隐藏状态方面遇到了困难。 - Kevin Ansfield
@KevinAnsfield,对于该视图,您只需要一个控制器。在模板中执行{{view App.MessagerView}},您可以绑定属性(属性不必是原始的,对象和数组也可以),以在嵌入视图的控制器和视图控制器之间进行数据交互。使用绑定也可以跟踪状态——您的视图知道其状态——http://emberjs.com/api/classes/Ember.View.html#property_isVisible - Wojciech Bednarski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接