Ember:从Controller获取Model中的属性

5

我在一个模型上有一个计算属性,为了计算这个属性,我需要从控制器中获取一个属性(不是管理模型的控制器)。

我知道有 needs: 但这只是在控制器级别上。
如何从管理模型的控制器以外的控制器中获取Ember的属性?

我尝试按照[问这个问题的人][1]所建议的那样进行格式化,但没有成功。
所以,我尝试使用计算属性在模型上进行格式化,但要计算该属性,我需要从控制器中获取另一个属性。

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

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

编辑:
为了澄清我想做什么,我设置了一个示例,以一种普遍的方式展示了问题: 该示例应用程序允许您输入数字、存储它们并在列表中显示它们。 您还可以输入一个“转换因子”,它不会改变模型数据本身,但会改变模板上的呈现方式。 假设您输入数字2,2将保存在模型中,但当它在列表中显示时,它会使用您之前输入的转换因子进行“格式化”,并在模板中显示计算出的值。 问题是我想要格式化的值存储在不同的控制器上。 我已经尝试了以下方法:

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

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

  • 方法3:
    Handlebars Helper和控制器上的needs:
    1)在控制器上定义一个计算属性(处理模型),以从另一个控制器中获取所需的值
    2)创建一个handlebars helper,并传递来自模型和控制器的值,并返回计算出的值
    -->jsfiddle(您可以在评论中找到第三个jsfiddle的链接,因为我还没有足够的声望点)。
    我遇到的问题:
    而不是显示格式化数字,我在呈现的模板中得到“NaN”值。

如果有人有解决此问题的想法或可以指导我正确的方向,那将是很好的。非常感谢您的帮助!感谢您的时间!


你能否在 JSBin 或 JSFiddle 上设置一个已经尝试过的示例?这样将更容易进行帮助。 - intuitivepixel
3#方法的链接:jsfiddle - Nairam
2个回答

10

从模型访问任何控制器的行为实际上违背了Ember架构的原则。大多数格式问题最好使用Handlebars助手来解决,但如果您需要以非常严格的方式将控制器和模型的数据组合起来,则可能需要在控制器上使用计算属性。

能否给出一个具体的示例说明您正在尝试做什么?这将使建议正确的解决方案更容易。


我在我的问题中添加了更多细节,并添加了一些jsfiddles。 - Nairam

1
我明白了:我使用了第三种方法(在我的问题中概述)。
  • 我使用计算属性将值从另一个控制器代理到绑定到我想要显示格式化值的模板的控制器。
  • 我创建了一个名为converted的handlebars助手来执行格式化。 handlebars助手接受两个参数:我从控制器代理的值(反过来来自不同的控制器)和模型中的值。

之前无法正常工作的是,在模板中使用助手时,所有项都会得到“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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接