Реализация маршрутов в Ember Addon - PullRequest
0 голосов
/ 21 октября 2019

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

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

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

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

  1. Экспорт метода изEmber Addon, который должен использоваться приложением для регистрации маршрутов в маршрутизаторе.
  2. Импортируйте маршрутизатор приложения в инициализаторе экземпляра, предоставленном 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
};
0 голосов
/ 21 октября 2019

Выбор Ember Add-on для обмена функциональностью - хороший вызов. Тем не менее, надстройки в основном используются для добавления / улучшения более сфокусированных функций .

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

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

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

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

...