在Ember-CLI中注入app初始化程序?

时间:2014-12-03 21:01:05

标签: javascript ember.js ember-cli ecmascript-6

在旧校Ember,我有一个初始化程序,它将应用程序控制器注入一个组件:

Ember.Application.initializer({
    name: "TopBreadcrumbs",
        initialize: function(container, application) {
        application.register("component:top-breadcrumbs", App.TopBreadcrumbsComponent);
        application.inject("component:top-breadcrumbs", "router", "router:main");
        return application.inject("component:top-breadcrumbs", "applicationController", "controller:application");
    }
});

将此初始化程序转换为Ember-CLI,因此将ES6模块转换为:

// initializers/top-breadcrumbs.js
export default {
    name: "top-breadcrumbs",
        initialize: function(container, application) {
        application.register("component:top-breadcrumbs", App.TopBreadcrumbsComponent);
        application.inject("component:top-breadcrumbs", "router", "router:main");
        return application.inject("component:top-breadcrumbs", "applicationController", "controller:application");
    }
};

问题是:如何以这种新格式引用 AppTopBreadcrumbsComponents App不再存在,并且该组件不再像以前那样是全局的......它是与其他所有内容一样的es6模块。

如何在Ember-CLI中引用它?

谢谢!

2 个答案:

答案 0 :(得分:2)

香草Ember中的

App与收到的application相同:

initialize: function(container, application) {

并且,要从应用程序访问组件,请在应用程序对象准备就绪后设置要加载的初始化程序:

after: 'registerComponents'

然后你可以用以下方式查找它们:

var TopBreadcrumbsComponent = container.lookup('component:top-breadcrumbs');

所以:

export default {
  name: "top-breadcrumbs",
  after: 'registerComponents',
  initialize: function(container, application) {
    var TopBreadcrumbsComponent = container.lookup('component:top-breadcrumbs');
  }
};

答案 1 :(得分:1)

找出解决方案:

import TopBreadcrumbsComponent from "frontend/components/top-breadcrumbs";

然后使用该导入。