我正在尝试从服务器获取数据,并将其设置为Ember的DS.Model(用恩伯的魔法)。但是记录是在没有数据的情况下创建的。
我有一个模型models / product.js:
const { Model } = DS;
export default Model.extend({
name: DS.attr(),
price: DS.attr()
});
在routes / product.js中,我请求所有产品:
model() {
return this.store.findAll('product');
}
服务器返回数据: https://gyazo.com/ba38b756f334bc22d07fe18ccfddda34
我希望ember用服务器中的数据创建3条记录。 但实际上,它创建了 https://gyazo.com/a9a7b77d838ec33b05e5f81ef8304cdb
怎么了?我想我不应该指定任何适配器和序列化程序来获得默认的Ember行为。
答案 0 :(得分:4)
您的API不遵循JSON:API specification,但Ember Data默认使用该API。如果您不遵循该约定,则需要更改应用程序的序列化器和适配器。让我引用有关的Ember文档:
Ember数据灵活性
由于使用了适配器模式,因此可以配置Ember Data 与许多不同种类的后端一起工作。有一个完整的 适配器和几个内置适配器的生态系统 Ember应用程序可与不同类型的服务器对话。
默认情况下,Ember Data的设计目的是开箱即用 JSON:API。 JSON:API是用于构建的正式规范 常规,健壮和高性能的API,允许客户端和 服务器来传递模型数据。
JSON:API标准化了JavaScript应用程序与服务器的通信方式,因此 您减少了前端和后端之间的耦合,并获得了 更改堆栈的更多自由。
如果您需要将Ember.js应用程序与没有 有可用的适配器(例如,您手动滚动API服务器 不符合任何JSON规范),则Ember Data是 设计为可配置以与服务器上的任何数据一起使用 返回。
来源:https://guides.emberjs.com/release/models/#toc_ember-data-flexibility
我不确定这是一个问题还是规范性声明,但实际上,如果您的API不是JSON:API,则必须指定适配器和序列化器。