Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js Ember JS:嵌套对象和体系结构_Ember.js - Fatal编程技术网

Ember.js Ember JS:嵌套对象和体系结构

Ember.js Ember JS:嵌套对象和体系结构,ember.js,Ember.js,我对Ember中的嵌套对象有很多(痛苦的)问题。我想我可能处理事情的方式不对,因为我怀疑这是一件相当标准的事情 假设我有一个对象A“有很多”B,每个B“有很多”C,等等(这个架构基本上匹配我的关系数据库模式) 我不需要这些嵌套的路由,所以我认为一种自然的方式来渲染像a一样的对象,就是使用partials。比如: A的模板: ...A stuff... {{#each Bs}} {{ partial "show_B" }} {{/each}} 等等 问题是我希望子对象有自己的控制器。我知

我对Ember中的嵌套对象有很多(痛苦的)问题。我想我可能处理事情的方式不对,因为我怀疑这是一件相当标准的事情

假设我有一个对象A“有很多”B,每个B“有很多”C,等等(这个架构基本上匹配我的关系数据库模式)

我不需要这些嵌套的路由,所以我认为一种自然的方式来渲染像a一样的对象,就是使用partials。比如:

A的模板:

...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
相同。此线程可能对任何查看此信息的人都有帮助: