2012-04-17 109 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