我正在使用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}}
,因为会有更多的计算 - 这只是第一步。
答案 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')
});