如何使用DS.Store.registerAdapter [英] How to use DS.Store.registerAdapter

查看:107
本文介绍了如何使用DS.Store.registerAdapter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用ember-data的每种类型的适配器功能。不知道我是否做错了,或者是否是垃圾数据中的错误。基本上我以为会这样工作:

I try to use the 'adapter per type' feature of ember-data. Not sure whether I'm doing something wrong or if it's a bug in ember-data. Basically i thought it would work like this:

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

商店始终使用默认适配器,而不是注册的每种类型的适配器
我写了一个测试用例来显示我的意思:

The store always uses the the default adapter and not the registered 'per type adapter' I wrote a test case to show what I mean:

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,则停止。

While debugging I noticed that the "DS.Mappable._reifyMapping" mixing explicitly checks for DS.Store and stops if the "this" is a DS.Store.

推荐答案

这应该可以。

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();
  }
});

...

这篇关于如何使用DS.Store.registerAdapter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆