gpt4 book ai didi

ember.js - find 和 findAll 返回一个空数组

转载 作者:行者123 更新时间:2023-12-03 21:53:01 25 4
gpt4 key购买 nike

在 ember 1.13.3 应用程序中,我有以下路线:

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。

出了什么问题?

最佳答案

store.find() 是一个异步操作。它返回一个 promise 。要访问实际数据,您必须向 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
end of script
result, Object

更新1

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

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

app/adapters/application.js

import DS from 'ember-data';

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

app/serializers/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

关于ember.js - find 和 findAll 返回一个空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31641375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com