Подтвердить что ты не робот

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

Я пытаюсь найти способ обнаружить, когда пользователь нажал кнопку назад/вперед в своем браузере.

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

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

Я попытался поместить журнал в мою функцию инициализации для своих просмотров. Но это не сработает, когда я использую кнопку "Назад".

Я действительно не уверен, как еще можно обнаружить эту страницу.

4b9b3361

Ответ 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))
}