在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。
出了什么问题?
答案 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
脚本结束
结果,对象
您正在使用JSONAPIAdapter
。您显示的有效负载不符合JSON API规范。您应该更新后端以符合规范。
如果您不能,请使用RESTAdapter
和RESTSerializer
作为解决方法:
应用/适配器/ 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