find和findAll返回一个空数组

时间:2015-07-26 20:03:42

标签: ember.js ember-data

在ember 1.13.3 app中,我有这条路线:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.find('skill');
  }
});

这个模型:

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  description: DS.attr('string'),
  link: DS.attr('string'),
  acquired_skills: DS.hasMany('users', { async: true, inverse: 'acquired_skills' } ),
  searched_skills: DS.hasMany('users', { async: true, inverse: 'searched_skills' } )
});

这是api返回的结果:

{"skills":[{"id":1,"name":"Ember","description":"JS Framework","link":null}]}

数组为空。我可以用console.log(this.store.find('skill').get('length'));检查它,我有0。

出了什么问题?

1 个答案:

答案 0 :(得分:5)

store.find()是一个异步操作。它返回一个承诺。要访问实际数据,您必须将回调传递给promise。当从后端获取数据时,promise会解析并执行回调,并将数据传递给它:

var foo = this.store.find('skill');

console.log("typeof foo", typeof foo);

foo.then( function(result) {
  console.log("result", result);
});

console.log("end of script");

上面的代码会产生以下输出:

  

typeof foo,Promise
  脚本结束
  结果,对象

UPD 1

您正在使用JSONAPIAdapter。您显示的有效负载不符合JSON API规范。您应该更新后端以符合规范。

如果您不能,请使用RESTAdapterRESTSerializer作为解决方法:

应用/适配器/ application.js中

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  host: 'http://localhost:3000',
  namespace: 'api/v1'
});

应用/串行化器/ application.js中

import DS from 'ember-data';

export default DS.RESTSerializer.extend({
  isNewSerializerAPI: false
});

此处有更多信息:http://emberjs.com/blog/2015/06/18/ember-data-1-13-released.html