iron:router Meteor как изменить маршрут (сохранить состояние в истории) не меняя URL

Я разрабатываю meteor applicaton . Для маршрутизации я использую iron:router . Я меняю некоторые шаблоны, изменяя переменную сеанса.

Есть ли способ, которым без изменения URL-адреса пользователь получает запись в истории браузера, что с возвратом браузера переменная сеанса изменяется обратно?

Моя проблема: некоторые бета-тестеры тестировали приложение и пытались закрыть некоторые оверлеи, которые они открывали с помощью кнопки «Назад» в браузере.


person Tobi    schedule 16.11.2014    source источник
comment
Мой вопрос в том, как вы активируете изменение пути, используя переменные сеанса? Например, я хочу, чтобы путь добавлялся /modal в конце, когда Session.get Modal, true... как это можно сделать?   -  person yimmy    schedule 05.12.2014
comment
Вы уже решили эту проблему? Я столкнулся с той же проблемой, и я хотел бы знать, как это сделать.   -  person Sang Yoo Kim    schedule 05.04.2015


Ответы (1)


Я не уверен, что понимаю ваш вопрос на 100%. Но похоже, что вы хотите установить переменную сеанса в определенное значение на основе определенного маршрута, чтобы контролировать состояние оверлея?

В этом случае лучше всего использовать хук onBeforeAction. .

Вот как это можно сделать с помощью контроллера маршрута< /а>:

PostController = RouteController.extend({
  waitOn: function () {},

  data: function () {},

  onBeforeAction () {
    Session.set('someSession', 'someValue');
  },

  action: function () {
    this.render();
  }
}); 

Если вы не хотите использовать Route Controller, вы также можете просто добавить функцию ловушки и указать маршрут, для которого хук должен запускаться.

Изменить

Router.onBeforeAction(function () {
  Session.set('showOverlay', false);
  this.next();
});

Вы также можете указать маршруты, которые вам не нужны, перед подключением:

Router.onBeforeAction(function () {
  Session.set('showOverlay', false);
  this.next();
}, { except: ['admin'] });
person Scott    schedule 16.11.2014
comment
Могу ли я изменить маршрут, не меняя URL-адрес? Например, у меня есть страница: /post/postHash и панель навигации, которая открывает оверлей/модальное окно, например. для отображения профиля пользователя. Но поскольку это может отображаться поверх почти каждого маршрута/страницы, я не хочу добавлять для этого дополнительный маршрут. Но поскольку некоторые из моих пользователей привыкли использовать кнопку «Назад» для перехода к предыдущему представлению, я хочу, чтобы приложение закрывало модальное окно при нажатии кнопки «Назад» в браузере. - person Tobi; 18.11.2014
comment
@Tobi Другими словами, когда пользователь либо нажимает кнопку «Назад», либо нажимает другую ссылку в приложении, чтобы перейти к другому маршруту, вы хотите, чтобы наложение с профилем пользователя закрывалось, верно? - person Scott; 18.11.2014
comment
яп. Но без отдельного URL-адреса для страницы с наложением, потому что наложение может отображаться на каждой странице. - person Tobi; 18.11.2014
comment
Отображение не проблема. Я умею делать крючки и так далее. Проблема в том, что хук не сохраняется в истории, так как маршрут не меняется. например route1 =› route1 с наложением =› route1 — это один и тот же URL-адрес. - person Tobi; 18.11.2014
comment
@Tobi Я бы порекомендовал показать некоторый код, который воспроизводит проблему, указав, каково текущее поведение, и указав, каково ожидаемое поведение. Я буду рад дать вам ответ, если вы можете это сделать. - person Scott; 18.11.2014
comment
Первая загрузка страницы: некоторая обзорная страница, URL: (/item/0987u239reu/overview) Пользователь нажимает кнопку, например отображается модальное окно, URL-адрес не меняется: (/item/0987u239reu/overview) Когда пользователь нажимает кнопку «Назад» в браузере, модальное окно должно закрыться (например, должна быть показана первая страница) - person Tobi; 14.04.2015