2012-03-01 12 views
32

¿Hay un evento general que se dispara cada vez que navegamos a una URL diferente?Backbone.js historia 'en el cambio de ruta' evento?

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() 

Hacer esto por vista es posible, pero estoy buscando una solución general.

Respuesta

46

No es el caso de "ruta" en el router:

http://backbonejs.org/#Events-catalog

  • "ruta" (router, ruta, params) - Fired por la historia (o router) cuando cualquier ruta tiene sido emparejado

Esto le permite enlazar a rutas específicas.

Si quieres disparar un manejador después cualquier vía, se unen a "ruta", y la ruta será el primer argumento:

myRouter.on("route", function(route, params) { 
    console.log("Different Page: " + route); 
}); 

Esto sólo se disparará eventos para sus rutas definidas de forma explícita. Si desea desencadenar eventos para rutas que no están definidas explícitamente, agregue una ruta 'splat' según How to detect invalid route and trigger function in Backbone.Controller

+2

Gracias, esto funciona. Sin embargo, el evento se dispara después de que la ruta haya cambiado. ¿Hay un evento que se dispara si se inicia un cambio de ruta? – TTT

+0

No es que yo sepa. –

+2

Parece que la versión 1.1.x tiene Router.execute, que se dispara antes de cada ruta. http://backbonejs.org/#Router-execute – zedd45

0

@TTT: Desafortunadamente Backbone no nos da un evento antes/después, por lo que tendrá que sobrescribir o extienda el Router.route. Usted puede encontrar la manera de hacerlo en esta respuesta: https://stackoverflow.com/a/16298966/2330244

2

De the Backbone docs

Este método se llama internamente en el router, cada vez que una enruta coincidencias y su devolución de llamada correspondiente está a punto de ser ejecutada. Anularlo para realizar análisis personalizada o envoltura de sus rutas, por ejemplo, para analizar las cadenas de consulta antes de entregarlos a su devolución de llamada ruta, así:

var Router = Backbone.Router.extend({ 
    execute: function(callback, args) { 
    args.push(parseQueryString(args.pop())); 
    if (callback) callback.apply(this, args); 
    } 
}); 

This site tiene algún código útil para redefinir el router para apoyar 'antes 'y' después 'de los ganchos, aunque requeriría una actualización con cada cambio de versión de Backbone.

Cuestiones relacionadas