Model view controller Ember.js递归控制器和视图

Model view controller Ember.js递归控制器和视图,model-view-controller,recursion,nested,ember.js,ember-router,Model View Controller,Recursion,Nested,Ember.js,Ember Router,假设我有一个Action对象列表,它对应于一个余烬模型。每个都有几个属性(时间戳)和一个detail属性,可以递归地包含更多的details(任意深度嵌套)。您可以将细节视为嵌套列表 我想为任何操作对象编写一个UI,允许轻松编辑细节的元素(自动完成值、轻松复制和粘贴、重新排序元素等) 现在,我的DetailView模板将递归地呈现额外的DetailViews: {{#if view.content.hasChildren}} {{#each child in view.content.c

假设我有一个
Action
对象列表,它对应于一个余烬模型。每个都有几个属性(时间戳)和一个
detail
属性,可以递归地包含更多的
detail
s(任意深度嵌套)。您可以将细节视为嵌套列表

我想为任何
操作
对象编写一个UI,允许轻松编辑
细节
元素(自动完成值、轻松复制和粘贴、重新排序元素等)

现在,我的
DetailView
模板将递归地呈现额外的
DetailView
s:

{{#if view.content.hasChildren}}
    {{#each child in view.content.children}}
       {{#DetailView contentBinding=child}}
    {{/each}}
{{#else}}
    {{#EditDetailView contentBinding=view.content.value}}
{{/if}}
因此,每个
DetailsView
对应于Details对象树中的一个节点

但我不清楚如何将控制器添加到混合中——我还需要存储其他状态/实现其他功能(例如,转换细节对象中的值以在DetailsView中显示;处理插入/删除/重新排序元素的事件;更改细节树的结构)这既不属于模型也不属于视图

理想情况下,我会有一个
DetailsController
作为代理
Details
每个
DetailsView
我可以动态实例化控制器并在视图模板中设置其内容吗?我对新Ember路由器的理解是在给定路由中设置控制器和插座;然而,这似乎不适用于这里,因为根本没有进行路由。欢迎提供有关如何处理递归控制器/视图/路由的所有建议/见解

我已经看过了,但这表明我有一个单一的
阵列控制器
用于所有
细节
s,甚至跨
操作
s。。。这也不会保留嵌套细节的树结构


我也看过了,但解决方案没有提到控制器。

**2013年2月20日更新**

{{control}}
助手的API文档现在可用。它警告说,“控制助手目前正在开发中,被认为是实验性的。”

要启用它,请在需要Ember之前设置
ENV.EXPERIMENTAL\u CONTROL\u HELPER=true

**更新日期:2013年2月3日**

一个新的助手
{{control}}
被添加到了ember中,实现了可重用视图的建议。因此,要根据
DetailsView
拥有
DetailsController
代理
Details
,您可以:

{{control 'detail' child}}
例如,见


理想情况下,我会有一个DetailsController作为代理,根据DetailsView创建详细信息。我可以动态实例化控制器并在视图模板中设置其内容吗

通常,实现这一点的方法是通过handlebar
{{render}}
帮助程序,它使用适当的视图和控制器呈现模板。不幸的是,不能使用
{{render}}
多次插入同一模板,因此不能在
{{each}
块中使用该模板

最近就这个话题进行了长时间的讨论。见:

提出了两种解决办法。第一个涉及将
itemControllerClass
属性添加到ArrayController。如果设置了此属性,ArrayController将自动在指定类中包装新内容。这是几周前添加到ember中的,它负责大多数用例,在这些用例中,您有一个项目的平面列表,并且希望每个项目都包装在一个代理中

第二个建议是可重用视图,它允许您为视图提供控制器类

{{view UI.Calendar dateBinding="post.startDate" controllerClass="App.CalendarController"}}
这将为每个UI.Calendar小部件创建App.CalendarController实例,该实例将与小部件的生命周期相关联。到今天为止,这还没有实施。看见获取最新状态

因此,对于您概述的用例,没有一个好的方法来实现这一点。同时,将数据绑定到视图:

{{view App.DetailView contentBinding="child"}}
然后在观点本身中加入一些逻辑似乎是合理的。如果在master中添加了可重用视图支持,则可以将该逻辑向上拉到控制器中


看:

太好了,这正是我要找的!如果有人正在寻找一个实现示例:
控件
帮助程序已被贬低:(我认为您现在应该使用
渲染
,但我得到了“超过最大调用堆栈大小”错误。