我有这个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')
};
}
});
答案 0 :(得分:9)
计算属性中传递的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以获取更多信息