Я новичок в Ember. Я планирую создать аддон для совместного использования в приложении. У моего аддона есть экраны для навигации. Я понятия не имею, как применять маршруты или реализовывать маршруты внутри аддона ember. И, кроме того, я хочу поделиться аддоном и с потребляющими приложениями. Может ли кто-нибудь предложить какой-либо простой пример того, как реализовать?
Реализация маршрутов в Ember Addon
Ответы (2)
Папка app
аддона Ember объединяется с папкой app
потребляющего приложения. Хотя это в основном используется для предоставления компонентов и служб, оно работает одинаково для маршрутов, контроллеров и шаблонов маршрутов. Единственная сложность в совместном использовании маршрутов через Ember Addon — это их регистрация.
Существует два решения для регистрации маршрута, предоставляемого Ember Addon:
- Экспортируйте метод из Ember 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
};
route.js
(то есть хук beforeModel
), похоже, не выполняется. Есть ли что-нибудь еще, что мне нужно сделать, кроме ember g route my-route
в моей папке дополнений?
- person andyroo; 25.05.2021
app/
(или реэкспортированы оттуда). Только содержимое папки app/
объединяется с потребляющим приложением. Все в addon/
должно быть импортировано явно путем использования app.
- person jelhan; 25.05.2021
.js
. Ctrl+c
и перезапускember serve
исправили. Ваше здоровье!
- person andyroo; 25.05.2021
Выбор надстройки Ember для совместного использования функций — хороший выбор. Однако надстройки в основном используются для добавления/улучшения дополнительных специализированных функций.
Чтобы повторно использовать/расшаривать страницы (маршруты) в приложении, в Ember есть специальное решение, которое называется Эмбер-Двигатели.
Согласно официальному руководству,
Механизмы позволяют объединять несколько логических приложений в одно приложение с точки зрения пользователя.
Таким образом, мы можем иметь несколько страниц (аналогично любому другому автономному приложению Ember) внутри движков и монтировать эти страницы внутри хост-приложений с легкостью.