快速上下文:应用程序视图有 2 个出口。一个用于工具栏。另一个用于可路由的“主”视图层次结构。
app -- main
\-- toolbar
我需要工具栏中的一些按钮来触发“主”视图中的事件。不更新任何模型中的任何数据。我只是指示它触发对视图呈现的绘图库的一些更改。清除画布,重置缩放值等。
在 1.0 pre2 和更早的版本中,我使用了操作和 router.get('someController.view') 来访问我想要的视图并触发操作/方法/事件。几乎不是应用程序设计的巅峰之作,但它运行良好。
这个选项现在已经消失了,我无法找到一个好的选择。在不在子/父层次结构中的视图之间进行通信时,我应该使用什么机制?我想出的一切都很笨拙,并引发了我的感觉,即“Ember 有更好的方法”。
简而言之,我想要:
- 触发事件的工具栏按钮
- 对此做出反应并对其自身部分执行一些更新的主视图。
- 不会像通过路由那样在 Ember 的意义上重新渲染的主要视图。它使用绘图库并将其所有属性和行为集成到 Ember 模型和控制器中不会很有趣。
- 工具栏和主视图共享一个父视图,但位于不同的“分支”上。
我正在考虑的不良选择:
工具栏在很大程度上是一个应用程序级别的问题,但它确实有一些需要指示特定视图的按钮。我在 Ember 中看到的一个选项是将工具栏嵌套在“主”视图下。对于它的其他一些功能,这似乎是错误的。
通信可以由一个控制器(甚至可能是一个模型)来处理,该控制器将保存工具栏设置的属性,并且“监听”视图会对其做出反应并重置其值。这听起来像是对控制器和模型目的的滥用,并且像是一个非常糟糕的事件监听器设置。
我可以将绘图库作为 App.Drawing 之类的全局应用程序,但这似乎也很糟糕。这也意味着操作仍然无法使用视图中的任何数据来更新绘图库。
有什么建议么?