-
Notifications
You must be signed in to change notification settings - Fork 27
Open
Labels
Description
A template helper like this would allow folks to use lazy routeless engines with a nice(ish) syntax:
{{mount (load-engine 'engine-name-here')}}
Example implementation (thanks to @mike183):
import Ember from 'ember';
const { Helper, inject, getOwner } = Ember;
export default Helper.extend({
assetLoader: inject.service("asset-loader"),
compute: function([ engineName ]) {
// Return engineName if engine is loaded
if (this._engineName !== undefined && this._engineName === engineName) {
this._engineName = engineName;
return this._engineName;
}
// need to expose the ability to introspect a bundle's state (loaded, unloaded, etc)
if (this.get('assetLoader').isLoaded(engineName)) {
this._engineName = engineName;
return this._engineName;
}
// Load unloaded engine
this.get("assetLoader").loadBundle(engineName).then(() => {
// Update this._engineName
this._engineName = engineName;
// Trigger recompution of helper
this.recompute();
});
// Returning null ensures nothing is rendered
return null;
}
});