Ember.js Ember JS:嵌套对象和体系结构
我对Ember中的嵌套对象有很多(痛苦的)问题。我想我可能处理事情的方式不对,因为我怀疑这是一件相当标准的事情 假设我有一个对象A“有很多”B,每个B“有很多”C,等等(这个架构基本上匹配我的关系数据库模式) 我不需要这些嵌套的路由,所以我认为一种自然的方式来渲染像a一样的对象,就是使用partials。比如: A的模板:Ember.js Ember JS:嵌套对象和体系结构,ember.js,Ember.js,我对Ember中的嵌套对象有很多(痛苦的)问题。我想我可能处理事情的方式不对,因为我怀疑这是一件相当标准的事情 假设我有一个对象A“有很多”B,每个B“有很多”C,等等(这个架构基本上匹配我的关系数据库模式) 我不需要这些嵌套的路由,所以我认为一种自然的方式来渲染像a一样的对象,就是使用partials。比如: A的模板: ...A stuff... {{#each Bs}} {{ partial "show_B" }} {{/each}} 等等 问题是我希望子对象有自己的控制器。我知
...A stuff...
{{#each Bs}}
{{ partial "show_B" }}
{{/each}}
等等
问题是我希望子对象有自己的控制器。我知道自RC1()以来有了新的itemController,它很有用,但有一定的局限性。假设在层次结构的更深处,C对象每个都有一个D对象。因此,C模板将如下所示:
... C stuff...
{{#with c.D}}
{{ partial "show_D" }} // How do I get this partial to have its own controller?
{{/with}}
我想新的{{control}}
在这里可能会有所帮助,但是我在使用它时遇到了很多麻烦(上下文设置不正确)。此外,在我看来,如果它刚刚被添加(并且仍在开发中),这可能意味着应该有另一种方法来实现这一点。最后,使用两种不同的API感觉有点奇怪:“itemController”用于项目列表,而“{control}}”用于单个项目——最后,我只是尝试在这两种情况下将对象绑定到控制器
有人能给我指一下正确的方向吗
谢谢
PJ我相信你已经走上了正确的方向。您需要使用
控件
。我想这就是它被添加的原因
在我看来,itemController
和control
之间的区别在于itemController
不需要相应的视图/模板,因此您仍将处于相同的视图中,并且模板继续内联,而在control
中,您需要单独的视图和模板
如果control
或itemController
中的一个赢了,我认为它应该是control
,因为它目前在两种情况下都能工作(数组和单个对象),并且目前可以取代itemController
注意:如果您对{{each Bs}}
使用了控件
,而不是项目控制器
,则需要定义一个控制器、视图和模板,而不是部分
(或者让Ember.js为您生成它们)
像这样:
{{#each Bs}}
{{control "showB" this}}
{{/each}}
对于D:
{{control "showD" D}}
但我同意你的看法,control
仍然有缺陷,itemController
与control
非常相似,两者都有没有意义。两者都是相对较新的,所以我认为这就是你发现困难的原因。但这是github或
一个荒谬的解决方法是创建一个由包含D的数组组成的计算属性,并使用每个dArray
和itemController
:)但显然最好让控件为您工作
在最坏的情况下,请使用{{view}}
帮助程序,并在视图中添加一些逻辑,使其充当控制器(尽管不建议这样做)。非常感谢Teddy。然而,一个问题是,将{{{control}}
放在一个块中,对于这个块,现在实际上并不起作用。Cf此处:。它给我带来了很多问题。您需要手动将相应的控制器注册为singleton,这对我来说就像是一种黑客行为。所以事实上,现在itemController和{{{control}}
在集合上有不同的行为。。。这让整个事情变得更加奇怪。注意,解决方法是将其注册为非单例。没错,这是一个黑客行为,这就是为什么control
仍然隐藏在一个标志后面的原因:(但如果你让它工作,它的行为与itemController
相同。此线程可能对任何查看此信息的人都有帮助: