Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将余烬数据与非标准RESTAPI一起使用_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript 将余烬数据与非标准RESTAPI一起使用

Javascript 将余烬数据与非标准RESTAPI一起使用,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我正在尝试将Ember数据连接到现有的RESTAPI。我遇到的问题是REST实现不符合Ember Data期望的操作方式。我已经在网上搜寻了一些文档,这些文档可以建议如何使事情正常工作,但由于没有编写自己的DS.Adapter实现,我感到无所适从 以下是我的请求: /api/user/12345 它提供了以下响应: { data: { ID: '12345', firstName: 'Fred', lastName: 'Flintston

我正在尝试将Ember数据连接到现有的RESTAPI。我遇到的问题是REST实现不符合Ember Data期望的操作方式。我已经在网上搜寻了一些文档,这些文档可以建议如何使事情正常工作,但由于没有编写自己的DS.Adapter实现,我感到无所适从

以下是我的请求:

/api/user/12345
它提供了以下响应:

{
    data: {
        ID: '12345',
        firstName: 'Fred',
        lastName: 'Flintstone',
        emailAddr: 'fred.flintstone@example.com'
    }
}
恩伯希望“数据”是“用户”。不幸的是,我不能轻易地更改API。有什么建议吗


谢谢

我认为您可以通过创建自己的序列化程序并重写函数来实现这一点:

App.RESTSerializer = DS.RESTSerializer.extend({
  extract: function(loader, json, type, record) {
    var root = 'data';

    if (json[root]) {
      if (record) { loader.updateId(record, json[root]); }
      this.extractRecordRepresentation(loader, type, json[root]);
    }
  }
});

App.Store = DS.Store.extend({
  adapter: DS.RESTAdapter.extend({
    serializer: App.RESTSerializer.create()
  })
});
请注意,此修改假设您请求的内容将始终位于JSON的
data
键下

另外值得一提的是,原始方法有两行,但示例中未包括这两行:

 this.sideload(loader, type, json, root);
 this.extractMeta(loader, type, json);
这会使您失去
侧加载
功能和
元数据
提取。我希望失去此功能不会阻碍您的用例


希望能有所帮助。

@mzabriskie,很高兴我能帮上忙,请不要忘记将答案标记为已接受,这样将来遇到这种情况的人会知道它对你有用,谢谢:)