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