История Backbone.js "об изменении маршрута"?
Есть ли общее событие, которое срабатывает каждый раз, когда мы переходим на другой 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()
Это возможно, но я ищу общее решение.
4 ответа
На маршрутизаторе есть событие "route":
- "маршрут" (маршрутизатор, маршрут, параметры) - запускается по истории (или маршрутизатору), когда был найден какой-либо маршрут.
Это позволяет привязывать к конкретным маршрутам.
Если вы хотите запустить обработчик после любого маршрута, свяжите с "route", и маршрут будет первым аргументом:
myRouter.on("route", function(route, params) {
console.log("Different Page: " + route);
});
Это будет запускать события только для ваших явно определенных маршрутов. Если вы хотите инициировать события для маршрутов, которые не определены явным образом, добавьте маршрут "splat" согласно разделу " Как обнаружить недопустимый маршрут и функцию запуска в Backbone.Controller".
Этот метод вызывается внутри маршрутизатора, всякий раз, когда маршрут совпадает и его соответствующий обратный вызов должен быть выполнен. Переопределите его, чтобы выполнить пользовательский анализ или перенос ваших маршрутов, например, для анализа строк запроса перед передачей их обратному вызову маршрута, например, так:
var Router = Backbone.Router.extend({
execute: function(callback, args) {
args.push(parseQueryString(args.pop()));
if (callback) callback.apply(this, args);
}
});
На этом сайте есть некоторый полезный код для переопределения маршрутизатора для поддержки перехватчиков "до" и "после", хотя для этого потребуется обновление при каждом изменении версии Backbone.
@TTT: К сожалению, Backbone не дает нам событие до / после, поэтому вам нужно будет перезаписать или расширить Router.route. Вы можете найти способ сделать это в этом ответе: https://stackru.com/a/16298966/2330244
Может быть, это расширение будет полезно для вас: https://github.com/zelibobla/Backbone.RewindableRoute/blob/master/backbone.rewindableRoute.js