将JSON转换为RESTAdapter EmberJS的适当格式

DaZ*_*Zzz 5 json ember.js ember-data

我从API获得了一个具有以下格式的JSON

[
  {
    "id": 45,
    "name": "Pasta",
    "_order": 0,
    "is_hidden": null,
    "is_list": false
  },
  {
    "id": 46,
    "name": "Salads",
    "_order": 1,
    "is_hidden": null,
    "is_list": false
  },
  {
    "id": 47,
    "name": "Dessert",
    "_order": 2,
    "is_hidden": null,
    "is_list": false
  }
];
Run Code Online (Sandbox Code Playgroud)

我看到它的标准RESTAdapter格式无效,我需要先放置模型的名称.在我的例子中它可能应该是这样的:

{
  "category":
    [
      {
        "id": 45,
        "name": "Pasta",
        "_order": 0,
        "is_hidden": null,
        "is_list": false
      },
      {
        "id": 46,
        "name": "Salads",
        "_order": 1,
        "is_hidden": null,
        "is_list": false
      },
      {
        "id": 47,
        "name": "Dessert",
        "_order": 2,
        "is_hidden": null,
        "is_list": false
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

那么如何让它在我的适配器中看起来如此?好像我应该使用 DS.RESTSerializer,但我无法弄清楚我应该覆盖哪种方法......

Pao*_*olo 4

我今天早些时候遇到了这个问题。解决这个问题的一个很好的干净方法是为您的 ApplicationSerializer 定义一个 normalizePayload 方法。它是为了被覆盖而设计的,因此您不会影响其他任何内容。

例如

App.ApplicationSerializer = DS.RESTSerializer.extend({
    normalizePayload: function(type, payload) {
        return { category: payload };
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您只想对处理的某些有效负载执行此操作,那么您只需在其中添加一个条件即可。

App.ApplicationSerializer = DS.RESTSerializer.extend({
    normalizePayload: function(type, payload) {
        if (type.toString() === 'App.Category') {
            return { category: payload };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有关 normalizePayload 方法的更多信息,请参阅http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_normalizePayload