Ember ActiveModelAdapter自定义

时间:2014-11-14 16:06:51

标签: ember.js ember-data

我的Ember应用程序与API(通过DS.ActiveModelAdapter适配器)交互,该API使用JSON响应GET "/api/v1/users?username=mcclure.rocio"

{
  "user": {
    "id": 5,
    "name": "Rocio McClure",
    "username": "mcclure.rocio",
    "email": "rocio.mcclure@yahoo.com"
  }
}

我的路由器是:

Router.map(function() {
  this.route("login");
  this.route("user", {path: "user/:username"}, function() {
    this.route("profile");
  });
});

所以我有像http://localhost:4200/user/mcclure.rocio这样的路线,它是用户的总结。

问题是在路线中加载了正确的模型:

export default Ember.Route.extend(AuthenticatedRouteMixin, {
  model: function(params) {
    return this.store.find('user', { username: params.username })
  }
});

我的Ember检查员声明加载的模型是一个空的 DS.AdapterPopulatedRecordArray 。这是因为findQuery(实际上称为我提供查询对象)期望在我的API返回单个用户 JSON对象时获取JSON数组,因此它将其转换为空数组。

但是this.store.find('user', { username: params.username })会为我的API构建正确的请求,但是如何让商店接受API响应并将其作为模型提供给我的路线?

请注意: 如果我的API返回一个数组,则可以执行以下操作:

export default Ember.Route.extend(AuthenticatedRouteMixin, {
  model: function(params) {
    return this.store.find('user', { username: params.username }).then(function(data){
      return data.objectAtContent(0);
    });
  }
});

但是,我不想修改它。

1 个答案:

答案 0 :(得分:1)

您应该使用DS.RestSerializer上的normalizePayload函数来修改对Ember Data期望格式的响应。