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

Ember.js 从模型中的控制器获取属性,ember.js,ember-data,Ember.js,Ember Data,我有一个模型的计算属性,为了计算它,我需要一个控制器的属性(不是控制模型的那个)。 我知道有需求:但这只是开着的 控制器级别。 如何从管理模型的控制器以外的控制器获取Ember中的属性 我正在尝试像[提出这个问题的人][1]那样进行一些格式化,但我没有成功地完成那里的建议。 因此,我尝试使用计算属性对模型进行格式化,但要计算该属性,我需要控制器的另一个属性 非常感谢您的帮助!谢谢 注意:我正在使用EmberData来管理模型 编辑: 为了澄清我试图做的事情,我设置了一个示例来说明问题 一般来说:

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

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

非常感谢您的帮助!谢谢

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

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

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

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

  • #3方法:
    把手助手和
    需要:
    在控制器上
    1) 在控制器(处理模型)上定义一个计算属性,以从另一个控制器获取有问题的值
    2) 创建车把辅助对象,并传入模型值和控制器值,然后返回计算值
    -->jsfiddle(您可以在评论中找到第三个jsfiddle的链接,因为我还没有足够的信誉点)。
    我遇到的问题:
    我没有显示格式化的数字,而是在渲染模板中的每个值上显示“NaN”

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

从模型访问任何控制器都与Ember的体系结构格格不入。大多数格式化问题最好使用Handlebar助手解决,但是如果您需要以非常严肃的方式组合来自控制器和模型的数据,那么您可能需要控制器上的计算属性


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

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

  • 我使用computed属性将值从另一个控制器代理到绑定到要在其中显示格式化值的模板的控制器
  • 我创建了一个名为
    converted
    的车把助手,用于格式化。Handlebar辅助对象接受两个参数:我从控制器代理的值(该值反过来来自不同的控制器)和来自模型的值
以前不起作用的一点是,在模板中使用帮助程序时,我会在所有项目上获得“NaN”,而不是格式化输出。
解决此问题的方法是,使用以下选项替代模板中的模型:

    {{#each controller}}
    <tr>
        <td>{{converted amount conversionFactor}}</td>
    </tr>
    {{else}}
    <tr>
        <td>No amounts here yet</td>
    </tr>
    {{/each}}
{{#每个控制器}
{{转换金额转换因子}
{{else}
这里还没有金额
{{/每个}}
我把它改成这样:

    {{#each item in controller}}
    <tr>
        <td>{{converted item.amount conversionFactor}}</td>
    </tr>
    {{else}}
    <tr>
        <td>No amounts here yet</td>
    </tr>
    {{/each}}
{{{#控制器中的每个项目}
{{已转换项目.金额转换因子}
{{else}
这里还没有金额
{{/每个}}
而且它工作得很好


下面是工作方法

您能用您已经尝试过的方法设置JSFIDLE的jsbin吗?对于3#方法,这将更容易帮助进行大纲链接:我在问题中添加了更多细节,并添加了一些jsfiddle。