1

我正在使用 Backbone.js,并且我有一个路由器。这是我的路由属性:

routes: {
    "pagea": "pageafunc",
    "pageb": "pagebfunc",
    "pagec": "pagecfunc",
}

是否可以添加如下所示的路线:

"mypath/*subroute": function(subroute) {
    //do somethong  
}

?

4

2 回答 2

2

不,routes对象只能有字符串值。

如果要传递自己的回调,则需要以编程方式设置路由。例如,在路由器的初始化函数中,您可以这样做:

this.route('mypath/*subroute', 'mypath_subroute', function(){
  // Route callback stuff.
});

也就是说,这很快就会变得非常不可读,这意味着您必须扫描您的初始化函数以了解您定义的所有路由,因此将所有路由存储在routes对象中要干净得多。或者至少将路由函数体保留在路由器本身上,并将路由路径保留在单独的部分中以提高可读性。

于 2012-11-15T17:16:27.283 回答
0

接受的答案不正确,或者可能只是过时了。在任何一种情况下,根据官方Backbone 文档

路由哈希将 URLs 映射到路由器上的函数或者只是直接函数定义,如果您愿意的话

哇!这意味着您应该能够执行以下操作:

var
Router= Backbone.router.extend({
  routes:{
    "path/to/:view": function(view){ console.log(view); }
    }
  });

例如,如果您想{routes}在初始实例化或类似情况之前扩展修改对象,这是一个方便的简写。但是,值得注意的是,使用匿名回调将禁用命名空间事件触发该路由。(请参阅上面的@loganfsmyth 评论。)不过,这可能不是最糟糕的权衡,具体取决于您的用例。

于 2017-08-01T16:48:23.323 回答