编程语言
首页 > 编程语言> > javascript-Ember:从实用程序类访问余烬数据“存储”对象

javascript-Ember:从实用程序类访问余烬数据“存储”对象

作者:互联网

我在我的ember应用程序中有一个用于验证用户名的实用程序类,并按照ember-cli文档中的指定进行设置.我在应用程序中的多个位置(组件和控制器)进行客户端用户名验证,因此我想将验证逻辑引入可重用的方法中.

该文件位于/app/utils/username-validator.js中,我可以通过将其导入来成功将其包含在我的应用程序中,如下所示:从“ my-app / utils / username-validator”导入usernameValidator;

到目前为止,它的效果很好,我已经将该模式用于多个实用程序类.我现在遇到的问题是,我希望用户名验证器方法包括检查用户名是否已经存在的检查.

当我使用Ember-Data时,我想检查Ember-Data存储.默认情况下,似乎只能在控制器和路由中访问该存储.如何在实用程序类中使其可访问?我看到的所有注入示例都涉及将商店注入到其他一流的Ember对象(如组件)中.

是否可以将商店也注入简单的实用程序类?

谢谢!

我正在使用以下版本:

Ember-cli v0.2.6
ember.debug.js:4888 DEBUG: -------------------------------
ember.debug.js:4888 DEBUG: Ember             : 1.12.0
ember.debug.js:4888 DEBUG: Ember Data        : 1.0.0-beta.18
ember.debug.js:4888 DEBUG: jQuery            : 1.11.3
ember.debug.js:4888 DEBUG: Ember Simple Auth : 0.8.0-beta.2
ember.debug.js:4888 DEBUG: -------------------------------

=====更新了基于torazaburo答案的详细解决方案======

创建服务效果很好.这是我使用ember-cli(v0.2.6)和ember v1.12.0的方法

>在/app/services/\u0026lt;service-name\u0026gt;.js内创建服务

服务蓝图将如下所示(请注意,服务的名称取决于文件的名称):

import Ember from "ember";

export default Ember.Service.extend({
   myFunction: function(){

   }
});

>在/app/initializers/\u0026lt;service-name\u0026gt;.js中为您的服务创建一个初始化程序,该初始化程序用于将您的服务注入到不同的顶级Ember对象(例如路由,控制器,组件等)中.请注意,初始化程序的文件名应与您的服务的文件名匹配.

初始化程序的蓝图如下所示:

export function initialize (container, app) {
       // Your code here
}

export default {
  name: '<service-name>',
  initialize: initialize
};

举一个具体的例子,可以说您的服务称为验证程序,其中包含一堆验证例程.您希望将验证器注入所有控制器,还希望将Ember Data存储注入到验证器本身.您可以这样做:

export function initialize (container, app) {
  // Inject the Ember Data Store into our validator service
  app.inject('service:validator', 'store', 'store:main');

  // Inject the validator into all controllers and routes
  app.inject('controller', 'validator', 'service:validator');
  app.inject('route', 'validator', 'service:validator');
}

export default {
  name: 'validator',
  initialize: initialize
};

解决方法:

使您的实用程序成为一个“服务”,您可以在其中注入商店.实际上,即使您不需要该存储,听起来您的实用程序也应该是一种服务.例如,通过使其成为服务,在编写测试时将其存根变得更加容易.使用服务,您不需要导入任何东西,也不需要在初始化程序中进行任何全局注入,您可以简单地说:

export default Ember.Component.extend({

    myService: Ember.inject.service(), // inject services/my-service.js

    foo: function() {
         this.get('myService').api1(...);
    }

});

标签:ember-js,ember-cli,ember-data,javascript
来源: https://codeday.me/bug/20191120/2042327.html