如何始终用ember.js加载灰烬引擎



我目前正在尝试无论身在何处,都试图访问我的余者发动机。我想拥有每个引擎的名称,因为我想在主要应用程序中显示每个引擎。
这里的问题是我找不到一种捕获那里名称的方法,因为只有当我们导航到与引擎相关的页面时,发动机才会加载。
这是通常捕获每个引擎名称的服务,称其为引擎管理器

import Ember from 'ember';
import App from '../app';
/**
 * This service will help us manage every engines that are in our application,
 */
export default Ember.Service.extend({
    availableEngines: [],
    addEngines(engines)
    {
        this.get('availableEngines').push(engines);
        console.log(this.get('availableEngines'));
    }
});

,然后在每个引擎中,更准确地说,在每个引擎的每个 aneengines/addon/Engine.js 中,我都放置:

import Engine from 'ember-engines/engine';
import loadInitializers from 'ember-load-initializers';
import Resolver from './resolver';
import config from './config/environment';
import Ember from 'ember';
const { modulePrefix } = config;
const Eng = Engine.extend({
    modulePrefix,
    Resolver,
    dependencies: {
        services: [
            'engines-manager'
        ]
    },
    enginesManager: Ember.inject.service('engines-manager'),
    init() {
        this._super(...arguments);
        this.get('enginesManager').addEngines('nameOfMyEngines');
    }
});
loadInitializers(Eng, modulePrefix);
export default Eng;

如果我们在与引擎相关的页面上使用,但是我不想去每个页面加载它们,所以这是我的问题:如何始终加载ember-engines?

ps:将我的lazy-loading设置为truefalse不会更改任何内容。

感谢Slack Community,我们找到了解决方法。如果我们不输入,则引擎并不意味着加载。
因此,这是一个解决方案,没有真正回答答案,但是至少您可以访问引擎中存在的数据,例如名称或服务。

第一个

您必须在服务中创建一个容器,在您的应用中:

export default Ember.Service.extend({
 fetchEngines()
    {
    let container = Ember.getOwner(this).lookup('application:main').engines; 
    }
});

就是这样,如果您知道如何使用此数据,则可以获取引擎名称。

第二>

您现在有一个容器,但是数据不能这样使用,这里的容器不是JSON对象。

let newObject = [];
for (let key in container) {
     if (container.hasOwnProperty(key))
         newObject.push(key);
}

这里的 newObject是一个数组,其中包含您 app.js 中每个引擎的名称。希望对某些人有所帮助。我不会接受此回应,因为这不是问题的问题,但这是一个开始。

相关内容

  • 没有找到相关文章

最新更新