计算模型的长度

win*_*yer 5 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');
}),
Run Code Online (Sandbox Code Playgroud)

route.js

import Ember from 'ember';

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

Mar*_*ior 11

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');
})
Run Code Online (Sandbox Code Playgroud)

由于您只是对属性进行别名,因此您可以利用Ember.computed.alias,并将代码简化为:

productsCount: Ember.computed.alias('model.products.length')
Run Code Online (Sandbox Code Playgroud)

Ember.computed.*您还可以在文档中查看其他非常有用的计算宏以获取更多信息