【问题标题】:How to always load an ember-engines with Ember.JS如何始终使用 Ember.JS 加载 ember 引擎
【发布时间】:2017-09-28 07:46:00
【问题描述】:

我目前正在尝试访问我的ember-engines,无论我在哪里。我想知道每个引擎的名称,因为我想在我的主应用程序中显示每个引擎。
这里的问题是我找不到找到名称的方法,因为只有当我们导航到与引擎相关的页面时才会加载引擎。
这是通常捕获每个引擎的每个名称的服务,称之为 engines-manager

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'));
    }
});

然后在每个引擎中,更准确地说,在每个引擎的每个 anEngines/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 不会改变任何东西。

【问题讨论】:

    标签: ember.js ember-data ember-cli ember-engines


    【解决方案1】:

    感谢 slack 社区,我们找到了解决方法。如果我们不输入引擎,则无法加载引擎。
    所以这里有一个解决方法,它不会真正响应答案,但至少您可以访问引擎中存在的数据,例如名称或服务。

    首先

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

    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 中存在的每个引擎的名称。 希望对一些人有所帮助。我不会接受这个回答,因为这不是问题所要问的,但这是一个开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      相关资源
      最近更新 更多