iron:router Meteor как да промените маршрута (запазване на състоянието в историята), без да променяте URL адреса

Разработвам meteor applicaton. За маршрутизиране използвам iron:router. Променям някои шаблони, като променям променлива на сесия.

Има ли някакъв начин, без да променя URL адреса, потребителят да получи запис в хронологията на браузъра, че с обратно връщане на браузъра променливата на сесията се променя обратно?

Моят проблем е: Някои бета тестери тестваха приложението и се опитаха да затворят някои наслагвания, които отвориха с бутона за връщане назад на браузъра.


person Tobi    schedule 16.11.2014    source източник
comment
Въпросът ми е как активирате промяна в пътя, като използвате променливи на сесията? Например, искам пътят add /modal в края, когато Session.get Modal, true ... как може да стане това?   -  person yimmy    schedule 05.12.2014
comment
Решихте ли вече този проблем? Попаднах на същия проблем и бих искал да знам как да направя това.   -  person Sang Yoo Kim    schedule 05.04.2015


Отговори (1)


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

Ако случаят е такъв, най-добрият ви залог би бил да използвате onBeforeAction hook.

Ето как можете да направите това с Route Controller:

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