骨干路由器添加路由作为功能

时间:2012-11-15 16:26:56

标签: javascript backbone.js

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

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

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

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

2 个答案:

答案 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。)不过,这可能不是最糟糕的权衡取决于您的用例。