4

私は奇妙な問題に苦しんでいます。Activity次のように定義されたプロパティで呼び出されるモデルがあります。

owner: DS.belongsTo('App.User', embedded: true)

これUserは、次のような JSON 応答を取得している場合の定義済みモデルでもあります。

some single properties and

user: { id: etc. }

私のすべてのプロパティは適切にマップされますが、JSON からのユーザー埋め込みオブジェクトは所有者プロパティにマップされません。しかし、私が変わるとき

owner

user

それはうまくマッピングされます。しかし、私が言いたいことをよりよく表しているので、所有者を残したいと思います。私はこのアクションを試しました:

owner: DS.belongsTo('App.User', key: 'user', embedded: true)

しかし、それは役に立ちませんでした。

4

1 に答える 1

1

まず、最新の Ember / EmberDataを使用することをお勧めしますがextractSingle、カスタムシリアライザーを拡張して埋め込みレコードを手動で処理する必要があります(以下の例を参照)。また、次のような関係を定義する必要があります。

App.Activity = DS.Model.extend({
  name:  DS.attr('string'),
  owner: DS.belongsTo('user')
});

App.User = DS.Model.extend({
  name:       DS.attr('string'),
  activities: DS.hasMany('activity')
});

次に、ActiveModelAdapterサーバーとの通信時にアンダースコアを使用している場合 (つまり、EmberData 0.13 のように) を使用することをお勧めします。

App.ApplicationAdapter = DS.ActiveModelAdapter;

最後に、ownerforを使用するには、カスタムシリアライザーでUserオーバーライドします。typeForRoot

例えば:

App.ApplicationSerializer = DS.ActiveModelSerializer.extend({
  typeForRoot: function(root) {
    if (root == 'owner' || root == 'owners') { root = 'user'; }
    return this._super(root);
  },

  // based on: https://github.com/emberjs/data/blob/master/TRANSITION.md#embedded-records
  extractSingle: function(store, type, payload, id, requestType) {
    var owner = payload.activity.owner,
        ownerId = owner.id;

    payload.owners = [owner];
    payload.activity.owner_id = ownerId;

    return this._super.apply(this, arguments);
  }
});

JSBin の例

于 2013-09-29T21:17:20.377 に答える