我正在使用Backbone.js而且我有一台路由器。这是路由器的路由属性:
routes: {
"pagea": "pageafunc",
"pageb": "pagebfunc",
"pagec": "pagecfunc",
}
是否可以添加如下所示的路线:
"mypath/*subroute": function(subroute) {
//do somethong
}
答案 0 :(得分:2)
不,routes
对象只能包含字符串值。
如果要传递自己的回调,则需要以编程方式设置路由。例如,在路由器的初始化函数中,您可以执行以下操作:
this.route('mypath/*subroute', 'mypath_subroute', function(){
// Route callback stuff.
});
也就是说,这很快就会变得非常难以理解,这意味着您必须扫描初始化函数以了解已定义的所有路由,因此将所有路由存储在routes
对象中是更干净。或者至少将路由功能主体保留在路由器本身上,并将路由路径保留在单独的部分中以便于阅读。
答案 1 :(得分:0)
接受的答案不正确,或者可能只是过时了。在任何一种情况下,按官方Backbone docs:
路由哈希映射URL到您路由器上的功能(或只是直接功能定义,如果您愿意)
嗬!这意味着你应该能够做到这样的事情:
var
Router= Backbone.router.extend({
routes:{
"path/to/:view": function(view){ console.log(view); }
}
});
例如,如果你想在初始实例化之前扩展修改{routes}
对象,或者某些东西,这是一个方便的速记。但是,值得注意的是,使用匿名回调将禁止触发该路由的命名空间事件。 (请参阅上面的@loganfsmyth's comment。)不过,这可能不是最糟糕的权衡取决于您的用例。