wil*_*dev 5 javascript arrays ember.js ember-data
我正在尝试使用Ember Data的hasMany字段来返回一个数组,并将数组中的项计数作为计算属性.但是,当我执行以下操作时,它会返回一个对象(由于{async:true}似乎是一个promise)?而不是我期望的数组.
App.Shift = DS.Model.extend({
name: DS.attr('string'),
people: DS.hasMany('person', {async: true});
number_of_people: (function(){
this.get('people').length
}).property('people')
)};
App.Person = DS.Model.extend({
first_name: DS.attr('string'),
last_name: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
更新:我想回报人的长度.我试过这个但是当我访问该属性时,我得到了仍然返回的promise对象,而不是当时返回的完成promise的值.如何获得承诺返回的评估值?
number_of_people: (function(){
return this.get('people').then(function(people){
return people.get('length');
});
})
Run Code Online (Sandbox Code Playgroud)
它是一个 Promise 数组,这意味着您第一次尝试访问它时,它将开始获取数据,完成后您可以从该 Promise 数组访问它。此外,它是一个承诺,因此您可以使用then(...)它以异步方式访问值。
shift.get('people').then(function(people){
console.log(people.get('length'));
});
Run Code Online (Sandbox Code Playgroud)
重要的是要记住它是异步的,因此根据您使用该值的位置,它有时会从 0 更改为 0+。下面修正的计算属性将在长度更新时更新
number_of_people: function(){
return this.get('people.length');
}.property('people.length')
Run Code Online (Sandbox Code Playgroud)
在模板中
{{number_of_people}}
Run Code Online (Sandbox Code Playgroud)
话虽这么说,这个计算属性有点毫无意义,您可以像这样在模板中使用它,它也会更新
{{people.length}}
Run Code Online (Sandbox Code Playgroud)