2

我有一个基本的 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

4 回答 4

4

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

于 2012-12-14T02:51:57.543 回答
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'})
于 2012-06-26T08:02:08.527 回答
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;
  }
})
于 2012-12-20T20:22:25.370 回答
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);
    }
});
于 2013-11-10T17:26:33.657 回答