2012-03-01 63 views
32

每次我們導航到不同的URL時,是否會發生一般事件?Backbone.js歷史上的「路線變化」事件?

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

這樣做每個視圖是可能的,但我正在尋找一個通用的解決方案。

回答

46

上有路由器的 「路由」 事件:

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

  • 「路線」(路由器,路由,則params) - 歷史(或路由器)被解僱時,任何路由具有已匹配。

這允許你綁定到特定的路由。

如果你想任何途徑火後的處理程序,結合「路線」,路徑將是第一個參數:

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

這隻會觸發你的明確定義的路由事件。如果要觸發未明確定義的路由事件,然後添加一個「圖示」路線按How to detect invalid route and trigger function in Backbone.Controller

+2

謝謝,這個工程。然而,事件在路線改變後觸發。如果啓動路線更改,是否會發生事件? – TTT 2012-03-06 09:22:35

+0

不是我所知道的。 – 2012-03-06 15:39:30

+2

看起來像1.1.x版本有Router.execute,它在每個路由上觸發_before_。 http://backbonejs.org/#Router-execute – zedd45 2014-04-15 20:38:05

2

the Backbone docs

這種方法被稱爲內部路由器中,每當路由匹配及其相應的回調即將被執行。重寫它來執行你的路由的自定義分析或包裝,例如,他們遞給你的路線回調之前分析查詢字符串,像這樣:

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

This site具有重新定義路由器之前,以支持」一些有用的代碼'和'後'掛鉤,但它需要更新每個版本的骨幹版本。