Маршрут вложенного индекса не отображается в розетке должным образом

#ember.js

#ember.js

Вопрос:

Я пытаюсь отобразить taking-cash/index внутри taking-cash {{outlet}} :

введите описание изображения здесь

router.js :

   this.route('retirement-options', function () {
    this.route('taking-cash');
  

Он не отображает его внутри розетки, если я явно не укажу /index путь:

   this.route('retirement-options', function () {
    this.route('taking-cash', function() {
      this.route('index', { path: '' });
    });
  });
  

Почему это не /index подразумевается, могу ли я не указывать это в router.js ?

Ответ №1:

Ember автоматически предоставляет индексный маршрут только для маршрутов, у которых есть хотя бы один другой дочерний элемент.

Давайте посмотрим на ваш пример:

   this.route('retirement-options', function () {
    this.route('taking-cash');
  });
  

Это создает три маршрута:

  • retirement-options
  • retirement-options.index
  • retirement-options.taking-cash

retirement-options.index и retirement-options.taking-cash оба используют один и тот же родительский маршрут retirement-options .

retirement-options сам по себе не доступен для навигации. Он всегда будет разрешаться для retirement-options.index маршрута, если переход явно не нацелен taking-cash на дочерний маршрут.

Как только вы добавите другой дочерний маршрут к retirement-options.taking-cash индексному маршруту, Ember автоматически создаст для него маршрут.

Вы можете применить явный индексный маршрут, создав маршрут, как вы показали. Но нет особой ценности в том, чтобы иметь индексный маршрут только как конечный узел.

Пожалуйста, найдите больше информации о маршрутах индекса в руководствах: https://guides.emberjs.com/release/routing/defining-your-routes/#toc_index-routes

Ответ №2:

Ember автоматически предоставит индексный маршрут только для маршрутов, но ему не обязательно иметь дочерний элемент. На самом деле это функция обратного вызова, которая должна присутствовать.

Итак, посмотрим на пример,

 this.route('retirement-options', function() {
  this.route('taking-cash', function() {
    this.route('index', { path: '' });
  });
});
  

индексная часть не является обязательной специально. Как только у вас будет объявлена функция обратного вызова, индекс будет там.

Это будет делать то же самое, что и в примере выше.

 this.route('retirement-options', function() {
  this.route('taking-cash', function() {});
});