提问者:小点点

Ember从模型中的控制器获取属性


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

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

任何帮助都非常感谢!谢谢!

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

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

>

  • #1方法:
    ArrayController上的计算属性-使用需要:在控制器中遍历并获取值
    --

    #2方法:
    模型本身的计算属性
    --

    如果有人知道如何解决这个问题,或者能给我指出正确的方向,那就太好了。非常感谢你的帮助!谢谢你的时间!


  • 共2个答案

    匿名用户

    从模型中访问任何控制器确实与Ember架构的本质背道而驰。大多数格式化问题最好用句柄助手来解决,但是如果您需要以非常严肃的方式组合来自控制器和模型的数据,那么您可能需要控制器上的计算属性。

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

    匿名用户

    我得到了它的工作:我已经使用了#3方法(在我的问题中概述)。

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

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

        {{#each controller}}
        <tr>
            <td>{{converted amount conversionFactor}}</td>
        </tr>
        {{else}}
        <tr>
            <td>No amounts here yet</td>
        </tr>
        {{/each}}
    

    我把它改成这样:

        {{#each item in controller}}
        <tr>
            <td>{{converted item.amount conversionFactor}}</td>
        </tr>
        {{else}}
        <tr>
            <td>No amounts here yet</td>
        </tr>
        {{/each}}
    

    它完美地工作!

    这是工作jsfiddle