2

ember-data の「タイプごとのアダプター」機能を使用しようとしています。私が何か間違ったことをしているのか、それとも ember-data のバグなのかはわかりません。基本的には、次のように機能すると思いました。

Person = DS.Model.extend({
  name: DS.attr('string')
});
var personAdapter = DS.Adapter.create();
DS.Store.registerAdapter(Person, personAdapter );

ストアは常に、登録されている「型ごとのアダプター」ではなく、デフォルトのアダプターを使用します。

var get = Ember.get, set = Ember.set;
var Person, store, adapter, personAdapter;

module("DS.Store and DS.Adapter 'adapter per type' integration test", {
  setup: function() {
    Person = DS.Model.extend({
      name: DS.attr('string')
  });

  adapter = DS.Adapter.create();
  personAdapter = DS.Adapter.create();

  DS.Store.registerAdapter(Person, personAdapter);
    store = DS.Store.create({ adapter: adapter });
  },

  teardown: function() {
    adapter.destroy();
    store.destroy();
  }
});


test("test function on the per type adapter", function() {

  adapter.find = function(store, type, id) {
    ok(false, "should call find on the registered 'per type adapter' not on the default one");
  };

  personAdapter.find = function(store, type, id) {
    store.load(Person, {
      'id': 1,
      'name': "My Name"
    });
  };

  var person = store.find(Person, 1);
  equal(person.get('name'), "My Name");
});

デバッグ中に、「DS.Mappable._reifyMapping」ミキシングが DS.Store を明示的にチェックし、「this」が DS.Store の場合は停止することに気付きました。

4

3 に答える 3

5

これはうまくいくはずです。

var get = Ember.get, set = Ember.set;
var Person, StoreClass, store, adapter, personAdapter;

module("DS.Store and DS.Adapter 'adapter per type' integration test", {
  setup: function() {
    Person = DS.Model.extend({
      name: DS.attr('string')
    });

    adapter = DS.Adapter.create();
    personAdapter = DS.Adapter.create();

    StoreClass = DS.Store;
    StoreClass.registerAdapter(Person, personAdapter);
    store = StoreClass.create({ adapter: adapter });
  },

  teardown: function() {
    adapter.destroy();
    store.destroy();
  }
});

...
于 2012-12-05T14:33:54.763 に答える
2

ここでの以前の回答は無効になりました (Ember Data 1.0.beta.1 以降)。

changelogに従って、 ModelNameAdapter構文を使用するようになりました。例えば、

App.Person = DS.Model.extend({
    ...
});

App.CustomAdapter = DS.Adapter.create({
    url: 'your/custom/url'
});

App.PersonAdapter = App.CustomAdapter;
于 2014-05-29T18:25:00.480 に答える
-1

これにはバグレポートがあります:タイプごとのアダプタは次の場合に尊重されませんcommit

編集:不適切なコメントを削除しました。

于 2013-03-08T16:28:42.583 に答える