1

我正在尝试连接 Ember Data 以使用现有的 REST API。我遇到的问题是 REST 实现不符合 Ember Data 期望的完成方式。我已经在网上搜索了可以建议如何使事情正常运行的文档,但是我没有编写自己的 DS.Adapter 实现,我不知所措。

这是我的请求的样子:

/api/user/12345

它提供了以下响应:

{
    data: {
        ID: '12345',
        firstName: 'Fred',
        lastName: 'Flintstone',
        emailAddr: 'fred.flintstone@example.com'
    }
}

Ember 期望“数据”是“用户”。不幸的是,我不能轻易更改 API。有什么建议么?

谢谢

4

1 回答 1

2

我能想到的一种方法可以实现这一点,即创建自己的序列化程序并覆盖该extract函数:

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()
  })
});

请注意,此修改假定您的请求内容将始终在data您的 JSON 的密钥下。

另外值得一提的是,原始extract方法有两行未包含在示例中:

 this.sideload(loader, type, json, root);
 this.extractMeta(loader, type, json);

这使您失去side loading功能和metadata提取。我希望失去此功能不会妨碍您的用例。

希望能帮助到你。

于 2013-08-05T22:16:12.190 回答