Javascript 主干网是否可以创建一个与所有URL匹配的路由?
我正在尝试使用与“/object/:id”匹配的backbone.js进行路由 问题是,我可以接收包含任何内容的get参数,包括斜杠,然后主干不识别这个url:/object/1337?var=/hey 我可以忽略get参数,还是简单地说我希望我的路由以“/object/:id”开始Javascript 主干网是否可以创建一个与所有URL匹配的路由?,javascript,backbone.js,url-routing,Javascript,Backbone.js,Url Routing,我正在尝试使用与“/object/:id”匹配的backbone.js进行路由 问题是,我可以接收包含任何内容的get参数,包括斜杠,然后主干不识别这个url:/object/1337?var=/hey 我可以忽略get参数,还是简单地说我希望我的路由以“/object/:id”开始 谢谢。终于找到了解决办法,也许有点难看 initialize : function() { this.route(/^object\/([^\?]*)\?/, "show", this.show); } 我相
谢谢。终于找到了解决办法,也许有点难看
initialize : function() {
this.route(/^object\/([^\?]*)\?/, "show", this.show);
}
我相信这会对你有用: “/object/:id/*splat” 您的'id'参数仍将与您的id匹配,并且末尾的'splat'将与末尾附加的任何内容匹配。它甚至与任何东西都不匹配。因此,如果希望在没有任何get参数的情况下触发此路由,则“/object/1337/”将起作用。注意末尾的斜线。它必须在那里 您的原始链接/object/1337?var=/hey也应该触发此路由 编辑:您可以在 编辑:原始链接将使用id和“?”之间的新斜杠
/object/1337/?var=/hey为此,我使用以下方法:
// 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);
如果您只想从片段中分离参数,我建议使用 您可以使用公共主干路由,插件将解析对象中的GET参数,然后将其传递给route handler函数 从插件的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' }
}
您能对参数进行URL编码吗?它匹配,但id等于1337?var=/heyYup检查我的“编辑”。您需要在“1337/?”之间加上斜杠,以便将所有get参数包装到splat中。因此,无论如何。不管你是否有获取参数,你都必须在你的id后面加上“/”。你有机会尝试吗?还没有,我下次会试试:)这并不难看,这就是为什么,主干网只是在内部将路由表转换为
route
调用。