不用说,对于Ember来说还很陌生,只是试图完成概念验证。已经对EmberCLI有所帮助,但这对我来说是一个新的奇怪现象。
/routes/index.js
export default Ember.Route.extend({
model() {
return this.store.findAll('skill');
}});
/models/skill.js
import Model from 'ember-data/model';
export default Model.extend({
name: DS.attr('string'),
desc: DS.attr('string'),
type: DS.attr('string')
});
/adapters/application.js
import DS from "ember-data";
export default DS.JSONAPIAdapter.extend({
namespace: 'v1',
host: 'http://edu-api.app:8000',
});
/serializers/application.js
import DS from "ember-data";
export default DS.JSONAPISerializer.extend({});
/templates/index.hbs
<h2>Skills</h2>
<ul>
{{#each model as |item|}}
<li>
<div>
<li>{{item}} {{item.id}} {{item.type}} {{item.name}} {{item.desc}}</li>
</div>
</li>
{{/each}}
</ul>
似乎id attr可用并且正确,但是所有其他attrs都没有从json加载。如果我复制/粘贴json并在模型中手动设置它,则它会按预期工作,因此从模型存储区或序列化器中进行筛选时是否会进行某些过滤?
最佳答案
JSONAPISerializer
和JSONAPIAdapter
不是用于简单的JSON / REST后端,而是用于与JSONAPI
完全兼容的后端。
您说它在复制并粘贴并将其设置在模型上时起作用,因此,您可能表示这样的意思:
this.store.createRecord('skill', {
id: '1',
name: 'foo',
desc: 'bar',
type: 'baz'
});
这确实适用于模型创建,但不是
JSONAPI
兼容的响应!在JSONAPI
中,您将具有以下内容(如果请求应返回多个实体:{
data: [{
id: '1',
attributes: {
name: 'foo',
desc: 'bar',
type: 'baz'
}
}]
}
因此,您现在有两个选择:
使您的API
JSONAPI
兼容,或者使用其他适配器和串行器。
RESTSerializer
/ RESTAdapter
是一个简单的默认实现,可以处理如下结构:{
id: '1',
name: 'foo',
desc: 'bar',
type: 'baz'
}
而且它们是高度可定制的。
检出official API以获取文档。