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 データ v 1.0 ベータ 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 に答える