我有这个 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/