2013-10-13 6 views
2

Некоторые маршруты в моем приложении - это игра, и я хочу реализовать процесс подтверждения, когда пользователь собирается покинуть игру для запуска.Meteor iron-router: отменить маршрут

Есть ли способ «остановить» маршрутизатор?.

Я попробовал:

Router.configure({ 

    onBeforeRun: function() { 
     Router.stop(); 
    } 
}); 

Bu разрушает Evrything.

Любая идея?

ответ

2

Не могли бы вы использовать что-то вроде этого? (Я еще не использовал Iron-Router)
В основном просто ловил ссылку на событие click и выдавал диалоговое окно подтверждения. Если они щелкают да она будет работать метод идти маршрутизатор, который инициирует изменение маршрута, в противном случае нажмите игнорируются

редактировать обновления кода использовать исходное значение HREF вместо

Meteor.templateName.events({ 
    'click .someLink': function(e) { 
    e.preventDefault(); 

    if (game.isRunning && confirm('are you sure you want to leave?')) { 
     // Router.go('routeName'); // edit, see comment below 
     Router.url(e.target.href); 
    }  

    } 
}); 
+0

, который будет работать, но это означает, что я не могу использовать '{{link-to}}' помощник; которая является одной из основных приятных утилит в железо-маршрутизаторе – fabien

+0

Хорошая точка. Я обновил код выше, чтобы использовать их метод url, который выглядит так, как будто он перемещается по URL-адресу, к которому вы его передаете. В качестве альтернативы вы можете удалить это и просто поместить 'e.preventDefault()' внутри оператора if. (не уверенный) – SkinnyGeek1010

+0

О, я видел, как использовать ваш ответ :) Я немного изменяю свой код – fabien

1

Это старое но просто решил. Вот мое решение:

Router.route('/myPath', { 
    unload: function (e, obj) { 
     if(Session.get("hasChanged")){ 
      if (confirm("Are you sure you want to navigate away ?")) { 
       // Go and do some action 
      }else{ 
       // Redirect to itself : nothing happend 
       this.redirect('/myPath'); 
      } 
     } 
    } 
} 
Смежные вопросы