Ember Data在POST上进行提取和反序列化序列化

时间:2014-08-08 12:38:45

标签: ember.js ember-data

我正在使用ember数据从远程服务器获取数据。 我的模型定义如下 -

App.Publisher = DS.Model.extend({
    name: DS.attr('string'),
    appName: DS.attr('string'),
    url: DS.attr('string'),
    appType: DS.attr('number'),
    streamType: DS.attr('number'),
    sslEnabled: DS.attr('number'),
    protocol: DS.attr('number'),

});

服务器的响应采用以下格式 -

{
  id: 1,
  name: "aurus",
  url: "1111",
  app_name: "superprofs",
  app_type: 1,
  stream_type: 1,
  ssl_enabled: 1,
  protocol: 1,
  created_at: "2014-08-08T10:52:40.000Z",
  updated_at: "0000-00-00 00:00:00"
},

但由于来自server的密钥为underscore格式且我的model密钥为camelCase, 来自服务器的值未设置。

如何使我的模型键适应服务器发送的数据格式(underscore),然后当我在ember js中调用save / create / update时,我希望将数据发送到underscore格式,因为我的服务器API期望采用下划线格式的数据

2 个答案:

答案 0 :(得分:1)

对于遇到同样问题的人,我使用ActiveModelAdapter

修复了问题

我让我的ApplicationAdpater从DS.ActiveModelAdapter扩展。

App.ApplicationAdapter = DS.ActiveModelAdapter.extend({});

答案 1 :(得分:0)

您需要创建App.PublisherSerializer,这取决于您使用的适配器应该来自DS.RESTSerializerDS.ActiveModelSerializerDS.JSONSerializer

您需要覆盖serializenormalizePayload挂钩以执行您需要的操作。

请记住,ember数据需要有一个带有记录类型的根密钥,在normalizePayload钩子中你应该最终返回一个看起来像

的对象
{
    publishers: [{
        id: 1,
        name: "aurus",
        url: "1111",
        appName: "superprofs",
        appType: 1,
        streamType: 1,
        sslEnabled: 1,
        protocol: 1,
        createdAt: "2014-08-08T10:52:40.000Z",
        updatedAt: "0000-00-00 00:00:00"
    }]
}

这是一个显示如何使用normalizePayload钩子的文件夹:http://emberjs.jsbin.com/mucici/1/edit