2012-12-12 34 views
0

我有以下路由器定义,但.route函数似乎没有设置。我究竟做错了什么?先谢谢您的帮助。骨干router.route不设置路由

# app.js.coffee 

initialize: => 
    router = new Backbone.Router 
    router.route "foo/:bar", "baz" 
    console.log router.routes # returns undefined 

回答

3

您创建使用Router.route路由是内部存储在History对象 - 他们不添加到收藏Router.routes

虽然他们仍在工作,请参阅here作为证明。请注意,在this.routes中,只定义了home路线,但您仍然可以点击baz路线。你可以看到baz路线,如果你检查Backbone.history.handlers,这是路线实际存储的地方。

var Router = Backbone.Router.extend({ 
    initialize: function() { 
     this.route("foo/:bar", "baz"); 
    }, 
    routes: { 
     "": "home" 
    }, 
    home: function() { 
     console.log("home hit"); 
    }, 
    baz: function(bar) { 
     console.log('test hit: ' + bar); 
    }, 
}); 
var router = new Router(); 
console.log(this.routes); 
console.log(Backbone.history.handlers); 
Backbone.history.start(); 
router.navigate("foo/testbar", { trigger: true }); 


不过请注意,我认为你需要在你的代码中使用this,因为router不会又里面initialize定义:

@route "foo/:bar", "baz" 
+0

感谢澄清,dbaseman 。你对他们的内部存储是正确的 - 我对此并不清楚。不过,对于未来的观众来说,看起来它们存储在handlers属性的Backbone.history对象中。很高兴知道! – createbang

+0

@ mlp.brooklyn是的,很好的关于Backbone.history的知识。我已经修复了我的答案。 – McGarnagle