我从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 } ];
我看到它的格式对于标准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 } ] }
那么如何使它在我的适配器中看起来像这样?似乎我应该使用 DS.RESTSerializer,但是我不知道应该重写哪种方法…
DS.RESTSerializer
我今天早些时候遇到了这个问题。解决该问题的一种好方法是为ApplicationSerializer定义normalizePayload方法。它被覆盖了,因此您不会影响其他任何东西。
例如
App.ApplicationSerializer = DS.RESTSerializer.extend({ normalizePayload: function(type, payload) { return { category: payload }; } }
如果您只想对某些已处理的有效负载执行此操作,则只需在其中添加条件。
App.ApplicationSerializer = DS.RESTSerializer.extend({ normalizePayload: function(type, payload) { if (type.toString() === 'App.Category') { return { category: payload }; } } }
有关normalizePayload方法的更多信息,请参见http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_normalizePayload