2012-11-15 81 views
1

我正在使用Backbone.js,我有一台路由器。这是我的路由路由器的性能:骨干路由器添加路由功能

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

是有可能增加,看起来像这样的路线:

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

回答

2

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

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

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

这就是说,这会造成非常不可读的很快,这意味着你必须通过你的初始化功能扫描到知道所有的路线的你已定义,因此将所有路线存储在routes对象中会更清晰。或者至少在路由器本身保留路由功能体,并将路由路径保存在一个单独的部分以便读取。

+0

谢谢!我需要动态创建路由,所以首先它不像路由属性那样可读。 – Naor

+0

有道理。很高兴能提供帮助:D – loganfsmyth

+0

因为我使用它来动态创建路线,所以我怎样才能为每条路线获取不同的名称?? – Naor

0

接受的答案不正确,或可能只是过时。在这两种情况下,每官方Backbone docs

的路由哈希将URL映射到...您的路由器上的功能(或只是直接的函数定义,如果你喜欢

嗬!这意味着你应该能够做这样的事情:

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

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