2012-04-17 113 views
0

我從骨幹工程下面的一段代碼:Backbone.js的路線不會被路由

App.Controllers.Test = Backbone.Router.extend({ 
    routes: { 
    'test': 'test', 
    'help': 'help' 
    }, 

    help: function() { 
    console.log('help'); 
    }, 

    test: function() { 
    console.log('test'); 
    }, 

    initialize: function() { 
    console.log('init'); 
    } 
}); 


// ... 

new App.Controllers.Test() 

但所有我曾經看到我的控制檯是init即使與#test#help
調用的URL有人知道缺少什麼嗎?

回答

4

你的初始化函數總是先運行,所以你的路由器被實例化,但也許你還沒有調用歷史記錄,調用你的路由器之後,你需要這樣一行代碼:

Backbone.history.start({pushState: true}) 

的pushState的選項是如果您使用的是具有歷史api的較新瀏覽器,因爲您使用哈希來調用您的路由,您可能不需要pushState。

如果你的路由器被分配給變量的路線,你的代碼可能是這樣的:

var routes = new Backbone.Router.extend({...}); 

Backbone.history.start({pushState: true}); 
+0

天哪,原來如此!感謝澄清,我需要使用'Backbone.history' :) – 2012-04-17 14:51:30

+3

很高興我可以幫助!另一個問題是要確保你的服務器能夠響應你指定的路由,即使它意味着每個服務器路由最初都加載了相同的index.html,否則你可能會遇到很多404錯誤。 – MrGrigg 2012-04-17 14:57:31