TTT*_*TTT 41 javascript routes backbone.js
是否可以在Backbone.js路由中包含可选参数?
例如:
routes:
"search/[:query]": "searchIndex"
Run Code Online (Sandbox Code Playgroud)
代替:
routes:
"search/": "searchIndex"
"search/:query": "searchIndex"
Run Code Online (Sandbox Code Playgroud)
Gab*_*e H 90
从Backbone 0.9.9开始,您可以添加带括号的可选参数.
例如,在您的路线对象中,您可以定义一个可选的路线部分,如下所示:
routes: {
"organize(/:action)": "displayOrganize"
}
Run Code Online (Sandbox Code Playgroud)
现在url路径将匹配/#organize并且路由类似/#organize/create.
请记住,如果您需要/#organize/识别(带有斜杠)等路线,您可以执行以下操作:
routes: {
"organize(/)(:action)": "displayOrganize"
}
Run Code Online (Sandbox Code Playgroud)
Mau*_*ord 16
可能最简单的方法就是声明多条路线,一条带有额外的arg,一条没有:
routes:{
"authProxy/:hash": "authProxy",
"authProxy/:hash/:url": "authProxy"
}
Run Code Online (Sandbox Code Playgroud)
然后在你的方法中检查它们:
authProxy: function(hash, url){
if (url){
// Hash and URL.
}else{
// Just hash.
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我比其他两个答案更喜欢这个,因为其他开发人员很容易理解正在发生的事情.
您可以使用以下route方法手动添加基于正则表达式的路由:
路线
router.route(route, name, [callback])手动为路由器创建路由,该
route参数可以是路由字符串或正则表达式.路由或正则表达式中的每个匹配捕获都将作为参数传递给回调.
所以像这样的东西应该工作:
this.route(/^search\/(.*)?/, 'searchIndex');
Run Code Online (Sandbox Code Playgroud)
然后searchIndex会被你的任何东西或你:query的论点所调用.
缺点是您不能将正则表达式路由放入routes对象中.如果你想将它们全部保存在一起,你可以route在路由器的initialize方法中添加所有路由.
| 归档时间: |
|
| 查看次数: |
23156 次 |
| 最近记录: |