【问题标题】:Ember.JS Computed PropertiesEmber.JS 计算属性
【发布时间】:2013-06-29 02:32:46
【问题描述】:

我正在尝试使用 Ember ObjectController 创建一些计算属性,但遇到了一些困难。我的对象(Baz)包含一个对象数组(Foo)。每个 Foo 都有一些键/值对,我们称它们为 alpha 和 beta。

使用这样的代码:

App.BazController = Ember.ObjectController.extend({
    total: function() {
        return this.get('foos').getEach('alpha').reduce(function(accum, item) {
            return accum + item;
        }, 0);
    }.property('foos.@each.alpha')
});

我可以计算每个 Foo 对象的 'alpha' 属性的总和,但我想计算特定 Foo 之间的值,理想情况下由它们的内置 ID 选择。我尝试了各种各样的表达式来尝试从数组中选择一个单独的 Foo 对象,但我似乎无法弄清楚。

这是否可以在 ObjectController 中完成,或者这是尝试计算此类值的错误位置?

非常感谢任何从代码到概念演练的帮助。

干杯, 艾伦

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    在构建total 时,您可以在reduce 方法中访问item 的属性。例如要查找产品总数,但前提是它们是inStockonSale,您可以使用。

    totalByReduce: function() {
      return this.get('model').reduce(function(total, product) {
        if (product.get('inStock') && product.get('onSale')) {
          return total + product.get('price');
        } else {
          return total;
        }
      }, 0);
    }.property('model.@each')
    

    同样,如果您在多个阶段进行过滤,即:过滤然后减少,您可以拥有 2 个相互依赖的不同计算属性。例如,如果您只显示inStockonSale 的产品,

    saleProducts: function() {
      return this.get('model').filter(function(product) {
        return product.get('inStock') && product.get('onSale');
      });
    }.property('model.@each'),
    

    然后要获得saleProductstotal,您可以设置第二个计算属性,例如,

    total: function() {
      return this.get('saleProducts').reduce(function(total, product) {
        return total + product.get('price');
      }, 0);
    }.property('saleProducts.@each'),
    

    这是一个jsbin 示例。

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 2013-11-29
      • 2020-12-10
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      相关资源
      最近更新 更多