【问题标题】:Ember JS: nested objects and architectureEmber JS:嵌套对象和架构
【发布时间】:2013-03-17 00:19:07
【问题描述】:

Ember 中的嵌套对象有很多(痛苦的)问题。我认为我可能以错误的方式处理事情,因为我怀疑这是相当标准的做法。

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

我不需要这些嵌套路由,所以我认为渲染像 A 这样的对象的一种自然方法是使用部分。比如:

A 的模板:

...A stuff...
{{#each Bs}}
    {{ partial "show_B" }}
{{/each}}

等等。

问题是我希望子对象有自己的控制器。我知道自 RC1 (http://emberjs.com/blog/2013/02/15/ember-1-0-rc.html) 以来有新的 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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我相信你已经在正确的方向。您需要使用control。我想这就是它被添加的原因。

    在我看来,itemControllercontrol 之间的区别在于 itemController 不需要相应的视图/模板,因此您仍将处于同一视图中并且您的模板继续内联,而在 @987654328 @你需要一个单独的视图和模板。

    如果controlitemController 中的一个获胜,我认为它会是control,因为它目前适用于两种情况(数组和单个对象)并且目前可以替换itemController

    请注意,如果您使用control 代替{{#each Bs}} 而不是itemController,则需要定义控制器、视图和模板而不是partial(或者让Ember.js 为您生成它们)。

    像这样:

    {{#each Bs}}
      {{control "showB" this}}
    {{/each}}
    

    对于 D:

    {{control "showD" D}}
    

    但我同意你的观点,control 仍然存在问题,itemControllercontrol 非常相似,两者兼有是没有意义的。两者都相对较新,所以我认为这就是您遇到困难的原因。但这是对 github 或 discuss.ember.js.com

    的讨论

    一个荒谬的解决方法是创建一个由包含 D 的数组组成的计算属性,并使用 each dArrayitemController :) 但是尝试让 control 为您工作显然更好。

    最坏的情况,使用{{view}} helper 并在视图中添加一些逻辑,使其充当控制器(尽管不推荐这样做)。

    【讨论】:

    • 非常感谢泰迪。一个问题是,将{{control}} 放在每个块中现在并不能真正起作用。参见这里:github.com/emberjs/ember.js/issues/1990。它给我带来了很多问题。您需要手动将相应的控制器注册为单例 - 这对我来说就像是黑客攻击。所以事实上,现在 itemController 和 {{control}} 在集合上有不同的行为......我认为这让整个事情变得更加奇怪。
    • 请注意,解决方法是将其注册为 not 单例。没错,这是一个 hack,这就是为什么 control 仍然隐藏在标志后面的原因 :( 但如果你让它工作,它的行为与 itemController 相同。
    • 这个帖子可能对任何看到这个的人都有帮助:discuss.emberjs.com/t/control-vs-itemcontroller/493/10
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2014-12-19
    • 2014-08-26
    • 2016-01-10
    • 2017-11-10
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多