javascript - Ember.JS 计算属性

标签 javascript ember.js

我正在尝试使用 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”属性的总和,但我想计算特定 Foos 之间的值,最好由它们的内置 ID 选择。我尝试了各种各样的表达式来尝试从数组中选择一个单独的 Foo 对象,但我似乎无法弄清楚。

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

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

干杯, 艾伦

最佳答案

在构建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示例。

关于javascript - Ember.JS 计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17413482/

相关文章:

javascript - 如何访问 iframe 中 URL 的参数?

javascript - 有必要在 Angular 指令链接内命名函数吗?

javascript - Ember 不会根据另一个属性更新 <input text> 的值

javascript - ember.js - 从数组中提取不同的属性

javascript - 是否可以在 Angular 4 中的这两个索引之间设置两个索引 & ngFor

javascript - 使用 javascripting DOM 脚本隐藏 div,具体取决于单选按钮的总和

javascript - Ember-Simple-Auth:如何在ajax请求中注入(inject) token

javascript - 当它依赖于另一个模型时创建模型

javascript - Selenium webdriver 如何使用 ng-click ="upload(' 文件上传文件')”

ember.js - Ember-cli-sass 不创建 .css 文件