我正在尝试使用匹配'/ object /:id'
的backbone.js进行路由问题是,我可以接收包含任何东西的参数,包括斜杠,然后骨干不识别这个网址:/ object / 1337?var = / hey
我可以忽略get参数,或者只是说我希望我的路由以'/ object /:id?'开头。 ?
感谢。
答案 0 :(得分:4)
终于找到了解决方案,也许有点难看
initialize : function() {
this.route(/^object\/([^\?]*)\?/, "show", this.show);
}
答案 1 :(得分:3)
我相信这对你有用:
'/对象/:ID / *图示'
您的'id'参数仍会与您的ID匹配,并且末尾的'splat'将匹配末尾附加的任何内容。它甚至都不会匹配。因此,如果您想要在没有任何get参数的情况下触发此路由,那么'/ object / 1337 /'将起作用。注意最后的斜线。它必须在那里。
/ object / 1337的原始链接?var = / hey也应触发此路线。
编辑:你可以在
阅读有关splats的信息http://documentcloud.github.com/backbone/#Router-routes
编辑编辑:您的原始链接将使用您的ID和'?'之间的新斜杠
/对象/ 1337 /?VAR = /哎
答案 2 :(得分:0)
我使用以下内容:
// Call for Backbone to make the route regexp
var route = Backbone.Router._routeToRegExp(route_string);
// Change the regexp to ignore GET parameters
route = new RegExp(route.source.replace(/\$/, "\\\/?(?:(\\\?.*$))*$");
// Create a route with a new regexp
// Backbone will not try to make a regexp from the route argument if it's already a RegExp object
this.route(route, name, callback);
答案 3 :(得分:0)
如果你想要的是从片段中分离参数,我建议使用backbone-query-params。
您可以使用常见的Backbone路由,插件将解析对象中的GET参数,然后传递给路由处理函数。
从插件的Github页面:
routes: {
'object/:id': 'myRoute'
}
...
myRoute: function(id, params) {
// if the routed url is '/object/1337?var=/hey'
console.log( id ); // ---> '1337'
console.log( param ); // ---> { var : '/hey' }
}