是否有可能通过骨干创建一个匹配所有网址的路由?

时间:2012-01-06 14:14:22

标签: javascript backbone.js url-routing

我正在尝试使用匹配'/ object /:id'

的backbone.js进行路由

问题是,我可以接收包含任何东西的参数,包括斜杠,然后骨干不识别这个网址:/ object / 1337?var = / hey

我可以忽略get参数,或者只是说我希望我的路由以'/ object /:id?'开头。 ?

感谢。

4 个答案:

答案 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' }

}