Таким образом, один из подходов, который работал бы до движков, - это использовать дополнение для общих маршрутов. Ваше дополнение будет определять маршруты, контроллеры и шаблоны, как обычно, с каталогом addons
. Вы также захотите определить что-то вроде addons/utils/router-utils
:
// assume we have a single route foo
export function addRoutes(router) {
router.route('foo');
}
router
- это значение this
, которое ember предоставляет при вызове Router.map
. Таким образом, в вашем дополнении, чтобы обеспечить «нормальное» развитие ощущений, вы захотите использовать эту функцию addRoutes
в фиктивном маршрутизаторе приложений в tests/dummy/app/router.js
:
import EmberRouter from '@ember/routing/router';
import config from './config/environment';
import { addRoutes } from 'addon-with-routes/utils/router-utils';
const Router = EmberRouter.extend({
location: config.locationType,
rootURL: config.rootURL
});
Router.map(function() {
addRoutes(this);
});
export default Router;
Обратите внимание, что приведенный выше файл router.js - это то, что генерирует Ember 3.8. Скорее всего, ваш будет отличаться, но ключевой момент в том, что мы вызываем нашу функцию addRoutes
с анонимным значением Router.map
this
, чтобы динамически добавлять наши маршруты в фиктивное приложение. Посмотрите этот twiddle для примера добавления маршрутов к маршрутизатору динамически.
Теперь вы можете запустить ember serve
из проекта аддона и протестировать ваши маршруты. Приемочные тесты также выполняются с фиктивным приложением, поэтому вы не ограничены этим подходом.
Теперь внутри вашего потребляющего приложения вы бы сделали то же самое, что мы сделали в фиктивном приложении, чтобы добавить маршруты. Этот подход, в целом, хотя и потребует тщательной разработки для эффективной работы (многие проблемы, которые решает двигатели, должны быть каким-то образом решены вами). Скорее всего, вашему аддону придется выставить много настроек, чтобы вы могли перенаправить его из аддона обратно в приложение-потребитель, которое не будет знать о маршрутах в приложении-потребителе. Вам придется избегать столкновений пространства имен. Звучит весело, хотя:)