未设置模型属性

时间:2019-06-28 22:20:31

标签: ember.js ember-data

我正在尝试从服务器获取数据,并将其设置为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行为。

1 个答案:

答案 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,则必须指定适配器和序列化器。