История события backbone.js 'on route change'?
Есть ли общее событие, которое срабатывает при каждом переходе на другой URL-адрес?
window.App =
Models: {}
Collections: {}
Views: {}
Routers: {}
init: ->
# Initialize Routers
new App.Routers.Main()
# Initialize History
Backbone.history.start(pushState: true)
# BIND VIEW CHANGE?
$(@).on 'changeOfRoute', ->
console.log "Different Page"
$(document).ready ->
App.init()
Выполнение этого для представления возможно, но я ищу общее решение.
Ответы
Ответ 1
На маршрутизаторе есть событие "маршрут":
http://backbonejs.org/#Events-catalog
- "route" (маршрутизатор, маршрут, параметры) - запускается по истории (или маршрутизатору), когда любой маршрут сопоставлен.
Это позволяет вам привязываться к определенным маршрутам.
Если вы хотите запустить обработчик после любого маршрута, привяжите его к "маршруту", и маршрут будет первым аргументом:
myRouter.on("route", function(route, params) {
console.log("Different Page: " + route);
});
Это приведет только к событиям для ваших явно определенных маршрутов. Если вы хотите инициировать события для маршрутов, которые явно не определены, добавьте маршрут "splat" в соответствии с Как определить недействительную функцию маршрута и триггера в Backbone.Controller
Ответ 2
От Документы Backbone
Этот метод вызывается внутри маршрутизатора внутри каждого маршрута, когда маршрут совпадает, и его соответствующий обратный вызов вот-вот должен быть выполнен. Переопределите его для выполнения пользовательского анализа или переноса ваших маршрутов, например, для синтаксического анализа строк запроса перед передачей их на ваш обратный вызов маршрута, например:
var Router = Backbone.Router.extend({
execute: function(callback, args) {
args.push(parseQueryString(args.pop()));
if (callback) callback.apply(this, args);
}
});
Этот сайт содержит полезный код для переопределения маршрутизатора для поддержки "до" и "после" перехватчиков, хотя для этого потребуется обновление с каждым изменение версии Backbone.
Ответ 3
@TTT: К сожалению, Backbone не дает нам событие до/после, поэтому вам нужно будет перезаписать или расширить Router.route. Вы можете найти способ сделать это в этом ответе: https://stackoverflow.com/a/16298966/2330244
Ответ 4
Может быть, это расширение было бы полезно для вас:
https://github.com/zelibobla/Backbone.RewindableRoute/blob/master/backbone.rewindableRoute.js