用于json的ember数据自定义序列化器

时间:2014-10-13 18:17:59

标签: json ember.js

我有一个我想在Ember数据中建模的Session对象。 (实际显示会话,但它是相同的)
服务器中的JSON看起来像这样(无法更改):

{
  "metadata": {
    "page": 1, 
    "page_size": 100, 
    "total_num_objects": 7, 
    "total_num_pages": 1
  }, 
  "result": [
    {
      "api_path": "/rest/sessions/2", 
      "end_time": 1412687629.42063, 
      "hostname": "127.0.0.1", 
      "id": 2, 
      "logical_id": "c6656738-4e23-11e4-9017-685b35b63131_0", 
      "product_name": null, 
      "product_revision": null, 
      "product_version": null, 
      "start_time": 1412687629.26851, 
      "status": "SUCCESS", 
      "type": "session", 
      "user_name": null
    }, 
   {
      "api_path": "/rest/sessions/3", 
      "end_time": 1412688377.15329, 
      "hostname": "127.0.0.1", 
      "id": 3, 
      "logical_id": "84707366-4e25-11e4-a659-685b35b63131_0", 
      "product_name": null, 
      "product_revision": null, 
      "product_version": null, 
      "start_time": 1412688377.11507, 
      "status": "SUCCESS", 
      "type": "session", 
      "user_name": null
    }, 
...

我意识到我需要编写一个自定义RESTSerializer,但我无法弄清楚我需要做什么才能摆脱元数据+ make ember意识到结果实际上是一个会话。

附带问题: 我可以制作DS.Model.extend属性,就像我从API获得的属性一样,或者我必须使用CamelCase并使用normalizeHash

1 个答案:

答案 0 :(得分:0)

你可能需要做这样的事情:

App.SessionSerializer = DS.RESTSerializer.extend({
    normalizePayload: function(payload) {
        return {
            sessions: payload.result
        };
    }
});

请参阅:http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_normalizePayload

关于您的其他问题,请查看DS.ActiveModelAdapter / ActiveModelSerializerActiveModelSerializer处理JSON中的下划线约定。