Реализация маршрутов в Ember Addon

Я новичок в Ember. Я планирую создать аддон для совместного использования в приложении. У моего аддона есть экраны для навигации. Я понятия не имею, как применять маршруты или реализовывать маршруты внутри аддона ember. И, кроме того, я хочу поделиться аддоном и с потребляющими приложениями. Может ли кто-нибудь предложить какой-либо простой пример того, как реализовать?


person saravanan selvam    schedule 21.10.2019    source источник
comment
Добро пожаловать в SO, это может помочь вам задать вопрос stackoverflow.com/help/how-to-ask, для Ember js guides.emberjs.com/ выпуск/приступая к работе/быстрый запуск/   -  person Arvind Maurya    schedule 21.10.2019


Ответы (2)


Папка app аддона Ember объединяется с папкой app потребляющего приложения. Хотя это в основном используется для предоставления компонентов и служб, оно работает одинаково для маршрутов, контроллеров и шаблонов маршрутов. Единственная сложность в совместном использовании маршрутов через Ember Addon — это их регистрация.

Существует два решения для регистрации маршрута, предоставляемого Ember Addon:

  1. Экспортируйте метод из Ember Addon, который должен использоваться потребляющим приложением для регистрации маршрутов в маршрутизаторе.
  2. Импортируйте маршрутизатор приложения в инициализатор экземпляра, предоставленный аддоном, и зарегистрируйте на нем маршруты.

Первый подход выглядит так:

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

Выбор надстройки Ember для совместного использования функций — хороший выбор. Однако надстройки в основном используются для добавления/улучшения дополнительных специализированных функций.

Чтобы повторно использовать/расшаривать страницы (маршруты) в приложении, в Ember есть специальное решение, которое называется Эмбер-Двигатели.

Согласно официальному руководству,

Механизмы позволяют объединять несколько логических приложений в одно приложение с точки зрения пользователя.

Таким образом, мы можем иметь несколько страниц (аналогично любому другому автономному приложению Ember) внутри движков и монтировать эти страницы внутри хост-приложений с легкостью.

person Gokul Kathirvel    schedule 21.10.2019
comment
Я бы не рекомендовал Ember Engines только для предоставления маршрутов приложению. Основным вариантом использования Engines является разделение рабочих единиц между разными командами. Это связано с некоторыми затратами и дополнительными трудностями, которые вы не хотите вводить в свой стек, если в этом нет необходимости. - person jelhan; 22.10.2019