Ember.js相关对象数组的长度

时间:2014-08-21 21:26:39

标签: javascript ember.js

我正在使用Ember Data和Ember CLI。我在两个模型之间有一个简单的一对多关系。我正在尝试创建一个计算属性,该属性返回附加到当前模型的项目数。

模型/ account.js

// Account model
import DS from 'ember-data';

export default DS.Model.extend({
  name:   DS.attr('string'),
  notes:  DS.hasMany('note', { async: true })
});

模型/ note.js

// Note model
import DS from 'ember-data';

export default DS.Model.extend({
  body:     DS.attr('string'),
  date:     DS.attr('number'), // unix timestamp
  account:  DS.belongsTo('account', { async: true })
});

控制器/帐户/ index.js

// account/index controller
import Ember from 'ember';

export default Ember.ObjectController.extend({
  oldNotesCount: function() {
    var notes = this.get('notes');
    console.log('=-=', notes.length); // undefined *****
    return notes.length;
  }.property('notes.@each')
});

notes.length undefined是怎样的?{/ p>

我已经简化了这个例子......我不能在我的情况下使用{{notes.length}},因为会有更多的计算 - 这只是第一步。

1 个答案:

答案 0 :(得分:0)

您将notes关联标记为异步,因此this.get('notes')会返回一个承诺。承诺没有length属性因此获得undefined

使用函数作为参数,在返回的promise上调用异步关联中的数据then。关联数据将作为第一个参数传递给该函数。

export default Ember.ObjectController.extend({
  oldNotesCount: function() {
    var _this = this;
    this.get('notes').then(function(notes){
      _this.set('oldNotesCount', notes.get('length');
    });
    return null;
  }.property('notes.@each')
});