Магистральные маршруты - обнаружение кнопки возврата в браузере
Я пытаюсь найти способ обнаружить, когда пользователь нажал кнопку назад/вперед в своем браузере.
Я использую магистраль для обработки маршрутов, а также позвоночник, чтобы отображать мои представления.
Проблема заключается в том, что я не могу подключиться к событию смены страницы из любого места.
Я попытался поместить журнал в мою функцию инициализации для своих просмотров. Но это не сработает, когда я использую кнопку "Назад".
Я действительно не уверен, как еще можно обнаружить эту страницу.
Ответы
Ответ 1
Вы должны использовать Backbone.Router
и не забывать о Backbone.history.start()
при запуске приложения.
Некоторая полезная информация может быть найдена здесь и здесь
Собственно, вторая ссылка - это не статья, а блог. И парень, который написал это, действительно, похоже, много знает о теме.
UPD: Идея заключается в том, что firewall-маршрутизатор привязывает методы при изменении URL-адреса. Поэтому вы просто должны поместить свою логику в этот метод, и таким образом вы сможете это отслеживать. Возможно, это не очень автоматический способ, и потребуется написать код, но я думаю, что он должен работать.
Ответ 2
Вы можете связать обратный вызов с Backbone route
событие:
Backbone.history.on('route', function () {
// Do your stuff here
});
Вы можете использовать Backbone.history.getFragment()
, чтобы знать, стояли ли вы.
Ответ 3
При нажатии кнопки "назад" запускается событие popstate.
Я использую этот фрагмент кода:
// listening for the browser back button
window.addEventListener('popstate', function(e) {
router.navigate(Backbone.history.getFragment(), { trigger: true, replace: true });
});
Ответ 4
вы можете расширить Backbone.Router
и перегрузить метод route
и open
. У вас есть все изменения страниц, обрабатываемые этими двумя способами. Так что просто переконвертируйте их из базового файла и играйте с ним.
Ответ 5
Очевидно, что даже GitHub не знает, как определить, какая кнопка была нажата;)
Они используют этот код:
slideTo: function (a) {
var b = this.pathFromURL(a),
c = this.frameForPath(b),
d = $("#slider .frame-center").attr("data-path") || "";
c.is(".frame-center") || (d == "/" || b.split("/").length > d.split("/").length ?
this.slideForwardTo(a) : this.slideBackTo(a))
}