在ember-data中映射数据

时间:2012-06-26 06:33:18

标签: ember.js ember-data

我有一个基本的ember-data模型对象:

App.Group =  DS.Model.extend({
//attributes
});

我的json结构如下:

root.levelone.leveltwo.property

我不想按原样映射此项目,但想将json中的属性映射到模型中的属性,如下所示:

App.Group =  DS.Model.extend({
  property: DS.attr('string')
});

是否可以定义与传入json不同的映射?我对服务器的内容没有多少控制权。

如果使用ember-data无法做到这一点,那么对这种深度嵌套进行建模的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

仅供参考,最新版本的Ember(第10版)要求在DS.JSONTransforms对象上定义自定义转换。 'to'和'from'属性已重命名为'serialize'和'deserialize'。

答案 1 :(得分:3)

我不太确定你在问什么,但你可以定义自定义DS.attr转换。

这样的事可能吗?没有测试过。

DS.attr.transforms.deepNest = {
  from: function(serialized) {
    return this.root2.property
  },
  to: function(deserialized) {
    return { root2: property }
  }
}

property: DS.attr('deepNest', {key: 'root1'})

答案 2 :(得分:3)

从此改变了:

DS.attr.transforms.object = {
  from: function(serialized) {
    return Em.none(serialized) ? {} : serialized;
  },
  to: function(deserialized) {
    return Em.none(deserialized) ? {} : deserialized;
  }
}

对此:

DS.RESTAdapter.registerTransform('object', {
  fromJSON: function(serialized) {
    return Em.none(serialized) ? {} : serialized;
  },
  toJSON: function(deserialized) {
    return Em.none(deserialized) ? {} : deserialized;
  }
})

答案 3 :(得分:2)

Ember data v 1.0 beta 2需要这种方法:

CustomTransform = DS.Transform.extend({
  deserialize: function(serialized) {
    ...
  },

  serialize: function(deserialized) {
    ...
  }
});

Ember.Application.initializer({
    name: "customTransforms",

    initialize: function(container, application) {
      application.register('transform:custom', CustomTransform);
    }
});