引擎/插件Ember之间的共享功能

时间:2018-06-08 19:29:58

标签: javascript ember.js

我正在创建多个Ember引擎(就像迷你应用程序),它位于父应用程序中。每个引擎都可以定义自己的服务/控制器/路由。但是当你进入引擎的登陆页面时,例如,每个引擎可能会进行完全相同的API调用。

此API调用可能在托管此调用的服务中定义,驻留在引擎中。 的一些-service.js

import  ...

export default Service.extend({
  store: service(),

  getlandingPageInfo(query) {
    validateQuery(query);

    return this.get('store')
      .queryRecord(some-model, query);
  },
});

现在,我的其他引擎的目标网页也需要相同的调用。但为此,我必须将所有some-model some-servicesome-adaptersome-serializer复制到该引擎中。如何在一些其他服务DRY中的一个服务中重用这些方法?

Ember不允许在引擎之间导入服务。

1 个答案:

答案 0 :(得分:1)

您可以定义引擎的engine.js哪些服务可以从引擎中的主机应用中获得。见http://ember-engines.com/guide/services

的engine.js

const Eng = Engine.extend({
  modulePrefix,
  Resolver,
  dependencies: {
    services: [
      'store',
      'session',
      'ajax',
      'router'
    ],
    externalRoutes: ['dashboard']
  }
});

但是,如果您在引擎B中有ServiceX,并希望与引擎A共享该服务,那么您需要创建一个单独的插件(可能是主机应用中的in-repo插件)

分享这些服务