编程语言
首页 > 编程语言> > javascript-在Ember中将灯具与LocalStorage适配器一起使用

javascript-在Ember中将灯具与LocalStorage适配器一起使用

作者:互联网

我正在构建一个Ember应用程序,该应用程序使用LocalStorage适配器保存和检索模型,但是在测试时能够将一些模型预加载到应用程序中将非常方便.标准方法似乎是将应用程序的普通存储适配器替换为FixtureAdapter,但我对配置与应用程序在生产中的运行方式有很大不同的应用程序感到不自在.我非常希望将LocalStorage适配器保持在适当的位置以进行测试,以便以实际的存储行为进行测试.

这是我的商店定义:

App.ApplicationSerializer = DS.LSSerializer.extend();
App.ApplicationAdapter = DS.LSAdapter.extend({
    namespace: 'App'
});
App.store = DS.Store.extend();

我试图像这样手动预加载模型:

App.store.push(
    "myModel", {
      id: 1,
      someProperty: "a"
 });

但是我得到的只是“无法读取未定义的属性’push’”,这告诉我我要解决所有这些错误.是否可以使用除FixtureAdapter以外的适配器将模型预加载到Ember应用程序中?还是可以将FixtureAdapter与另一个适配器并排使用?

解决方法:

该存储由初始化程序初始化.在您的特定情况下,App.store是一个类定义,而不是实例,而不是您仍然想使用该模式.

App.initializer({
    name:'fixtureInjector',
    after:['store'],

    initialize: function (container, application) {
        var store = container.lookup('store:main');
        store.push("myModel", {
          id: 1,
          someProperty: "a"
        });
    }
});

例如:http://emberjs.jsbin.com/OxIDiVU/882/edit

如果您不想使用容器/初始化器,也可以在应用程序路由中执行此操作.

App.ApplicationRoute = Em.Route.extend({
  beforeModel: function(){
    this.store.push("myModel", {
      id: 1,
      someProperty: "a"
    });
  }
});

标签:ember-js,ember-data,javascript
来源: https://codeday.me/bug/20191121/2051804.html