我目前正试图在任何地方访问我的余烬-发动机。我想知道每个引擎的名称,因为我想在我的主应用程序中显示每个引擎。
这里的问题是,我无法找到获取名称的方法,因为只有当我们导航到与引擎相关的页面时,引擎才会被加载。
这是通常捕获每个引擎的每个名称的服务,称为引擎管理器。
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/Engin.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;如果我们在引擎相关页面上,这个方法是有效的,但是我不想访问每个页面来加载它们,所以下面是我的问题:如何总是加载一个成员引擎?。
PS:将我的lazy-loading设置为true或false不会改变任何事情。
发布于 2017-09-29 12:29:34
多亏了这个松懈的社区,我们找到了一个解决办法。如果我们不进入发动机,它就不能装车。
因此,这里有一个解决方法,它并不真正响应答案,但至少您可以访问引擎中的数据,比如名称或服务。
第一
您必须在应用程序中在服务中创建一个容器:
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中存在的每个引擎的名称。希望这能帮到一些人。我不会接受这个回应,因为这不是问题所问的,但这只是一个开始。
https://stackoverflow.com/questions/46463684
复制相似问题