我在模型上有一个计算属性,为了计算我需要一个来自控制器的属性(不是控制模型的属性)。
我知道有needs:
但这只是在
控制器级别。
我如何从管理模型的控制器以外的控制器获取Ember中的属性?
我正在尝试做一些像[问这个问题] [1]那样的格式但是我没有成功那里的建议。
所以我尝试使用计算属性对模型进行格式化,但为了计算该属性,我需要来自控制器的另一个属性。
非常感谢任何帮助!谢谢!
注意:我正在使用EmberData来管理模型。
修改
为了澄清我正在尝试做的事情,我设置了一个显示问题的例子
以通用方式:示例应用程序允许您输入数字,存储它们,
并将它们显示在列表中。您还可以输入“转换因子”,它不会更改模型数据本身,但会更改模板上的表示。比如说,您输入数字2,保存在模型上,但是当它显示在列表中时,它会使用您之前输入的转换因子进行“格式化”,并且计算出的值会显示在模板中。问题是我想要格式化的值存储在不同的控制器上。这是我到目前为止所尝试的内容:
#1方法:
ArrayController上的计算属性 - 在控制器中使用needs:
遍历并获取值
- > jsfiddle
遇到的问题:
ArrayController似乎中断了,模板呈现就像根本没有存储的记录一样(注意:该示例使用本地存储,因此创建一些记录并取消注释ArrayController上的计算属性,你会看到它最初按预期工作,显示您输入的记录)。
#2方法:
模型本身的计算属性
- > jsfiddle
遇到的问题:
我不知道在模型内部如何从控制器获取属性
needs:
在控制器上
1)在控制器(处理模型)上定义计算属性,以从另一个控制器获得有问题的值
2)创建一个把手辅助器并传入模型中的值和来自控制器的值并返回计算值如果有人知道如何解决这个问题,或者能指出我正确的方向会很棒。非常感谢您的帮助!谢谢你的时间!
答案 0 :(得分:10)
从模型中访问任何控制器实际上都违背了Ember的架构。大多数格式化问题最好通过Handlebars帮助程序解决,但如果您需要以非常严肃的方式组合来自控制器和模型的数据,那么您可能需要控制器上的计算属性。
你能举一个具体的例子说明你想做什么吗?这将使建议正确的解决方案变得容易得多。
答案 1 :(得分:1)
我得到了它的工作:我使用了#3方法(在我的问题中概述)。
converted
的把手助手,它将进行格式化。把手助手接受两个参数:我从控制器代理的值(又来自不同的控制器)和模型中的值。以前没有用的东西是在模板中使用帮助器时我会在所有项目上获得“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