【问题标题】:Ember Getting property from Controller in ModelEmber 从模型中的控制器获取属性
【发布时间】:2013-06-03 00:14:57
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

  • 你能用你已经尝试过的东西设置一个 jsfiddle 的 jsbin 吗?这将更容易提供帮助
  • 3# 方法的链接:jsfiddle

标签: ember.js ember-data


【解决方案1】:

从模型访问任何控制器确实违背了 Ember 架构的纹理。大多数格式问题最好使用 Handlebars 助手解决,但如果您需要以非常严肃的方式组合来自控制器和模型的数据,那么您可能需要控制器上的计算属性。

你能举一个具体的例子来说明你正在尝试做什么吗?这样可以更轻松地提出正确的解决方案。

【讨论】:

  • 我为我的问题添加了更多细节并添加了一些 jsfiddles。
【解决方案2】:

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

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

以前不起作用的是,在模板中使用帮助程序时,我会在所有项目上得到“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 2015-10-11
    • 2015-04-12
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多