我目前正试图访问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;
如果我们继续引擎相关页面,这个方法正常工作,但我不想去每个页面加载它们,所以这是我的问题:如何总是加载一个余烬引擎?
PS:将我的lazy-loading
设为true
或false
并不会改变任何内容。
答案 0 :(得分:1)
由于社区松懈,我们找到了解决方法。如果我们不输入引擎,则无法加载引擎 因此,这是一个不能真正回答答案的解决方法,但至少您可以访问引擎中存在的数据,例如名称或服务。
您必须在应用中的服务中创建容器:
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 中存在的每个引擎的名称。
希望能帮助一些人。我不接受这个回应,因为这不是问题所在,但这是一个开始。