Папка app
Ember Addon объединяется с папкой app
приложения-потребителя. Хотя это в основном используется для предоставления компонентов и услуг, оно работает одинаково для маршрутов, контроллеров и шаблонов маршрутов. Единственный сложный способ предоставления маршрутов через Ember Addon - это их регистрация.
Существует два решения для регистрации маршрута, предоставляемого Ember Addon:
- Экспорт метода изEmber Addon, который должен использоваться приложением для регистрации маршрутов в маршрутизаторе.
- Импортируйте маршрутизатор приложения в инициализаторе экземпляра, предоставленном Addon, и зарегистрируйте на нем маршруты.
Первый подход выглядит следующим образом:
// in addon: /addon/index.js
export function registerRoutes(router) {
router.map(function () {
this.route('foo');
});
}
// in consuming application: /app/router.js
import EmberRouter from '@ember/routing/router';
import config from './config/environment';
import { registerRoutes } from 'my-addon';
const Router = EmberRouter.extend({
location: config.locationType,
rootURL: config.rootURL
});
Router.map(function() {
// application routes are registered as usual
});
// register routes provided by addon
registerRoutes(Router);
export default Router;
Второй подход немного сложнее, но не требует каких-либо изменений в потребляющем приложении. Это может показаться преимуществом или запутывающей магией, которой следует избегать.
// in addon: /app/instance-initaliziers/my-addon.js
// as this is merged with application's app tree, we can import files from application
import ApplicationRouter from '../router';
export function initialize() {
// register as you would do in app/router.js
ApplicationRouter.map(function() {
this.route('foo');
});
}
export default {
initialize
};