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。