Ember从模型中的Controller获取属性

Nai*_*ram 5 ember.js ember-data

我在模型上有一个计算属性,为了计算我需要一个来自控制器的属性(而不是控制模型的属性).我知道有,needs:但这只是在
控制器级别.
我如何从管理模型的控制器以外的控制器获取Ember中的属性?

我正在尝试做一些像[问这个问题] [1]那样的格式,但我没有成功那里的建议.
所以我尝试使用计算属性对模型进行格式化,但为了计算该属性,我需要来自控制器的另一个属性.

任何帮助是极大的赞赏!谢谢!

注意:我正在使用EmberData来管理模型.

编辑:
为了澄清我正在尝试做的事情,我设置了一个
一般方式显示问题的示例:示例应用程序允许您输入数字,存储它们,
并在列表中显示它们.您还可以输入"转换因子",它不会更改模型数据本身,但会更改模板上的表示.比如说,您输入数字2,保存在模型上,但是当它显示在列表中时,它会使用您之前输入的转换因子进行"格式化",并且计算出的值会显示在模板中.问题是我想要格式化的值存储在不同的控制器上.这是我到目前为止所尝试的:

  • #1方法:
    ArrayController上的计算属性 - needs:在控制器中使用遍历并获取值
    - > jsfiddle
    我遇到的问题:ArrayController
    似乎中断,模板呈现就像根本没有存储的记录一样(注意:该示例使用本地存储,因此创建一些记录并取消注释ArrayController上的计算属性,您将看到它最初按预期工作并显示您输入的记录).

  • #2方法:
    模型本身的计算属性
    - > jsfiddle
    我遇到的问题:
    我不知道如何在模型内部从控制器获取属性

  • #3方法: 把手
    助手和needs:控制器
    1)在控制器上定义一个计算属性(处理模型)以从另一个控制器获得有问题的值
    2)创建一个把手助手并传入模型中的值和来自控制器的值并返回计算值
    - > jsfiddle(你可以在评论中找到第三个jsfiddle的链接,因为我还没有足够的声誉点).
    我遇到的问题:我没有
    显示格式化的数字,而是在渲染模板中的每个值上获得"NaN".

如果有人知道如何解决这个问题或者能指出我正确的方向会很棒.非常感谢您的帮助!谢谢你的时间!

ahm*_*eod 10

从模型中访问任何控制器实际上都违背了Ember的架构.大多数格式化问题最好通过Handlebars帮助程序解决,但如果您需要以非常严肃的方式组合来自控制器和模型的数据,那么您可能需要控制器上的计算属性.

你能举一个具体的例子说明你想做什么吗?这将使建议正确的解决方案变得容易得多.


Nai*_*ram 1

我成功了:我使用了#3 方法(在我的问题中概述)。

  • 我正在使用计算属性将值从其他控制器代理到绑定到我想要显示格式化值的模板的控制器
  • 我创建了一个名为的车把助手converted,它将进行格式化。车把助手接受两个参数:我从控制器代理的值(又来自不同的控制器)和来自模型的值。

以前不起作用的是,在模板中使用助手时,我会在所有项目上得到“NaN”,而不是格式化输出。
解决问题的方法是,不要在模板中遍历模型:

    {{#each controller}}
    <tr>
        <td>{{converted amount conversionFactor}}</td>
    </tr>
    {{else}}
    <tr>
        <td>No amounts here yet</td>
    </tr>
    {{/each}}
Run Code Online (Sandbox Code Playgroud)

我把它改成这样:

    {{#each item in controller}}
    <tr>
        <td>{{converted item.amount conversionFactor}}</td>
    </tr>
    {{else}}
    <tr>
        <td>No amounts here yet</td>
    </tr>
    {{/each}}
Run Code Online (Sandbox Code Playgroud)

它工作完美!

这是工作中的jsfiddle