Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 余烬模型对象hasMany并不像我期望的那样返回数组_Javascript_Arrays_Ember.js_Ember Data - Fatal编程技术网

Javascript 余烬模型对象hasMany并不像我期望的那样返回数组

Javascript 余烬模型对象hasMany并不像我期望的那样返回数组,javascript,arrays,ember.js,ember-data,Javascript,Arrays,Ember.js,Ember Data,我试图使用Ember数据的hasMany字段返回一个数组,并将数组中的项目计数作为计算属性。但是,当我执行以下操作时,它会返回一个对象(由于{async:true}?)而不是我期望的数组,因此它看起来像一个承诺 App.Shift = DS.Model.extend({ name: DS.attr('string'), people: DS.hasMany('person', {async: true}); number_of_people: (function(){ thi

我试图使用Ember数据的hasMany字段返回一个数组,并将数组中的项目计数作为计算属性。但是,当我执行以下操作时,它会返回一个对象(由于{async:true}?)而不是我期望的数组,因此它看起来像一个承诺

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')
});
更新:我想返回人的长度。我尝试了这个方法,但是当我访问属性时,仍然返回了promise对象,而不是then中completed promise的值。我如何获得承诺返回的评估值

number_of_people: (function(){
  return this.get('people').then(function(people){
    return people.get('length');
  });
})

这是一个promise数组,意味着您第一次尝试访问它时,它将开始提取数据,完成后,您可以从promise数组访问它。此外,它是一种承诺,因此您可以在其上使用
然后(…)
以异步方式访问值

shift.get('people').then(function(people){
  console.log(people.get('length'));
});
记住它是异步的,这一点很重要,因此根据使用值的位置,它将在某个点从0更改为0+。以下更正的计算属性将在长度更新时更新

 number_of_people: function(){
   return this.get('people.length');
 }.property('people.length')
在模板中

{{number_of_people}}
这就是说,这个计算属性是毫无意义的,您可以像这样在模板中使用它,它也会更新

{{people.length}}

这是可行的,但我想返回承诺中的人的长度作为我计算的财产人数。我该怎么做?请参见上面我的问题的编辑。我在上面添加了一个示例。谢谢。这很简单,但我想把它复杂化。谢谢。使用
DS.FixtureAdapter
对我的karma测试也有同样的问题/困境:要么在前端使用
hasMany
不异步且失败,要么使用
{'async':true}
并在测试中失败
在修改DS.PromiseArray的内容属性之前应设置它
。您使用
然后(…)
的解决方案解决了该问题。拇指仰卧起坐