Backbone.js路由可选参数

在Backbone.js路由中可能有可选参数吗?

例如:

routes: "search/[:query]": "searchIndex" 

代替:

 routes: "search/": "searchIndex" "search/:query": "searchIndex" 

从Backbone 0.9.9开始,可以添加带括号的可选参数。

例如在你的路线对象中,你可以像这样定义一个可选的路线部分:

 routes: { "organize(/:action)": "displayOrganize" } 

现在urlpath将匹配/#organize和路由像/#organize/create

请记住,如果您需要/#organize/ (带有斜线)的路线得到识别,您可以执行以下操作:

 routes: { "organize(/)(:action)": "displayOrganize" } 

也许最简单的方法是声明多个路线,一个有额外的参数,一个没有:

 routes:{ "authProxy/:hash": "authProxy", "authProxy/:hash/:url": "authProxy" } 

那么只需在你的方法中检查它们:

 authProxy: function(hash, url){ if (url){ // Hash and URL. }else{ // Just hash. } } 

请注意,我比其他两个答案要好得多,因为其他开发人员很容易理解正在发生的事情。

您可以使用route方法手动添加基于正则expression式的路由:

路由 router.route(route, name, [callback])

手动为路由器创build路由, route参数可以是路由string或正则expression式。 来自路由或正则expression式的每个匹配捕获都将作为parameter passing给callback函数。

所以这样的事情应该工作:

 this.route(/^search\/(.*)?/, 'searchIndex'); 

然后, searchIndex将会以你的nothing或你的:query作为参数被调用。

缺点是你不能把正则expression式路由到你的routes对象。 如果你想把它们放在一起,你可以在你的路由器的initialize方法中添加所有你的路由。

怎么样使用*splat

路由 router.routes

路由哈希将具有参数的URL映射到路由器上的function,类似于View的事件哈希。 路由可以包含参数部分:param ,它与斜线之间的单个URL组件匹配; 和splat parts *splat ,可以匹配任意数量的URL组件。

例如, "search/:query/p:page"的路由将匹配#search/obama/p2的片段,将"obama""2"传递给动作。 "file/*path"将匹配#file/nested/folder/file.txt ,将"nested/folder/file.txt"传递给action。