我正在重构一个继承的 Ember 应用程序,它带有相当多的非 mvc 混乱。我希望尽可能保持模块化,并希望在多个屏幕中重用各种 ui 组件以帮助防止代码重复。
似乎网点是做到这一点的最佳方式。
现在,我有一个 UI 显示了许多元素,每个元素都使用模板化视图呈现。
{{#each item in controller}}
{{view App.ItemThumbView}}
{{/each}}
此视图的右侧边栏是一个出口,它会根据选择而变化。When I select an item, I would like to display a list of edit operations within the templatized sub-view, which when selected, reveal the proper edit UI through a nested outlet.
本质上
+---------------------------------------------------+
| Parent Pane
|
| +------------------------------+ +----------+
| | Device Section | | Sidebar |
| | | | [Outlet] |
| | +--------+ +---------+ | | |
| | | Dev 1 | | Dev 2 | | | |
| | |[outlet]| | [outlet]| | +----------+
| | +--------+ +---------+ |
| +------------------------------+
+--------------------------------------------------+
嵌套视图都共享同一个控制器——这是有道理的——但我需要能够将选定的视图连接到其相应的插座。我最初尝试连接插座的尝试从未显示出来。代码根本没有失败,所以控制器只是更新了一个隐藏的插座。
如何在 Ember 中为嵌套视图定位正确的出口?(充其量,我似乎能够点击侧边栏插座,但不能点击嵌套设备模板中的插座。)这是首先在 ember 中实现上下文菜单的合理结构吗?
*澄清一下 在我当前的设置中,每个设备项都使用相同的模板呈现。选中后,侧边栏插座将使用某些设备的元信息进行更新,而选定的设备视图还将其插座连接到编辑菜单。一次只能连接一个设备项目的“编辑”插座。
甚至在这里使用插座是否有意义,或者我应该将条件逻辑放入模板中以便在必要时显示编辑菜单?
更新以重申问题的最佳实践部分:
插座似乎非常适合解耦组件和面向未来的潜在视图嵌套。但是现在似乎访问嵌套视图的正确出口有点麻烦。此外,如果您总是知道哪些组件将有条件地嵌套在模板中,那么对您的视图进行硬编码似乎是最简单的。例如:
// within template used for individual result-list items
{{#if condition }}
{{view reusableSubView}}
{{/if}
这里首选的 ember 做事方式是什么?创建不一定始终连接的插座是否有任何开销?