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

История события 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()

Выполнение этого для представления возможно, но я ищу общее решение.

4b9b3361

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