javascript - 计算模型的长度

标签 javascript ember.js ember-data

我有这个 productsCount 计算属性,它应该计算所有 products 但它总是返回 0。为什么会这样,我该如何解决?

controller.js

productsCount: Ember.computed('model.products', function() {
  var products = this.get('model.products');
  return products.get('length');
}),

route.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return {
      products: this.store.find('product')
    };
  }
});

最佳答案

model.products传入您的计算属性,将在 this.get('model').set('products', [...]) 时触发叫做。但是因为products length 是一个类似对象的数组当有人调用 products.pushObject(...) 时,属性可能已更改这不会使您的计算属性重新计算,因为 products数组引用没有改变,只是你的内容。

要解决此问题,您必须添加 .length到你的计算属性依赖键,像这样:

productsCount: Ember.computed('model.products.length', function() {
  return this.get('model.products.length');
})

由于您只是为一个属性起别名,您可以利用 Ember.computed.alias ,并将您的代码简化为:

productsCount: Ember.computed.alias('model.products.length')

Ember.computed.* 中还有其他非常有用的计算宏你可能想看看 docs了解更多信息

关于javascript - 计算模型的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31191285/

相关文章:

ember.js - Ember 1.12.0 中对初始化程序的更改

javascript - 如何获取 Controller 内的 hasMany 关系数据数组?

javascript - 简单的 Ember.js `has-many` 关系不起作用

ember.js - 如何从 Ember-data 获取父模型

javascript - 强制 Instagram 个人资料页面的源代码使用 JavaScript 远程加载

Javascript 继承调用父级的非默认构造函数

javascript - 如何使用指令用新的后备 src 更新 src?

javascript - 重新运行 Ajax 脚本?

ember.js - 如何将 Ember 数据中的模型 URL(例如/comment)更改为嵌套 URL(如/posts/38/comment)?

ember.js 从 View 向 Controller 发送 Action