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 の場合は停止することに気付きました。