6

Ember データ 0.13 から 1.0.0 ベータに移行しています。ドキュメントhttps://github.com/emberjs/data/blob/master/TRANSITION.mdによると、タイプごとのアダプターとタイプごとのシリアライザーが存在するようになりました。

これは、主キーと認証の特定のオーバーライドを使用して「myRestAdapter」を定義できなくなったことを意味します。モデル タイプごとにこのコードを実装する必要があるため、同じコードが xx 回複製されます。

Ember データ 0.13 のコード:

App.AuthenticatedRestAdapter = DS.RESTAdapter.extend({  

  serializer: DS.RESTSerializer.extend({
    primaryKey: function() {
      return '_id';
    }
  }),

  ajax: function (url, type, hash) {
    hash = hash || {};
    hash.headers = hash.headers || {};
    hash.headers['Authorization'] = App.Store.authToken;
    return this._super(url, type, hash);
  }
});

Ember data 1.0.0 のコード (主キーを _id ではなく _id に設定する場合のみ:

App.AuthorSerializer = DS.RESTSerializer.extend({

  normalize: function (type, property, hash) {
    // property will be "post" for the post and "comments" for the
    // comments (the name in the payload)

    // normalize the `_id`
    var json = { id: hash._id };
    delete hash._id;

    // normalize the underscored properties
    for (var prop in hash) {
      json[prop.camelize()] = hash[prop];
    }

    // delegate to any type-specific normalizations
    return this._super(type, property, json);
  }

});

_id を主キーとして必要とするすべてのモデルに対して、この同じブロックをコピーする必要があることを正しく理解しましたか? アプリケーション全体に対してこれを 1 回指定する方法はもうありませんか?

4

4 に答える 4

5

コードはtype不可知論的であるため、モデルを拡張できるカスタムシリアライザーを作成しない理由は次のとおりです。

App.Serializer = DS.RESTSerializer.extend({

  normalize: function (type, hash, property) {
    // property will be "post" for the post and "comments" for the
    // comments (the name in the payload)

    // normalize the `_id`
    var json = { id: hash._id };
    delete hash._id;

    // normalize the underscored properties
    for (var prop in hash) {
      json[prop.camelize()] = hash[prop];
    }

    // delegate to any type-specific normalizations
    return this._super(type, json, property);
  }

});

そして、App.Serializerすべてのモデルに使用します:

App.AuthorSerializer = App.Serializer.extend();
App.PostSerializer = App.Serializer.extend();
...

それが役に立てば幸い。

于 2013-09-01T20:03:13.640 に答える
3

これが推奨されるかどうかはよくわかりませんが、すべてのモデルで主キーを「_id」にする必要があるため、次のようにしました。

DS.JSONSerializer.reopen({
  primaryKey: '_id'
});
于 2013-09-06T16:37:30.860 に答える
0

これは_idの主キーIDで機能することがわかりました:

MediaUi.ApplicationSerializer = DS.RESTSerializer.extend({

  normalize: function (type, property, hash) {
    // property will be "post" for the post and "comments" for the
    // comments (the name in the payload)

    // normalize the `_id`
    var json = { id: hash._id };
    delete hash._id;

    // normalize the underscored properties
    for (var prop in property) {
      json[prop.camelize()] = property[prop];
    }

    // delegate to any type-specific normalizations
    return this._super(type, json, hash);
  }

});

ここでの違いは、for ループでハッシュを切り替えて super にproperty渡していることです。hashこれは Ember Data 1.0 Beta のバグでしょうか?

于 2013-09-11T01:54:08.967 に答える