主干网是否可以创建一个与所有以某个东西开头的url匹配的路由

Is it possible with backbone to create a route that match all urls beginning with something?

本文关键字:开头 url 路由 创建 是否 主干网 一个      更新时间:2023-09-26

我正在尝试使用匹配'/object/:id'的backbone.js进行路由

问题是,我可以接收到包含任何内容的参数,包括斜杠,然后主干无法识别这个url:/object/1337?var=/hey

我可以忽略get参数吗?或者简单地说我希望我的路由以'/object/:id开始?'?

谢谢。

终于找到了一个解决方案,也许是一个有点难看的

initialize : function() {
  this.route(/^object'/([^'?]*)'?/, "show", this.show);
}

我相信这对你有用:

'/object/:id/*splat'

您的"id"参数仍将与您的id匹配,末尾的"splat"将与末尾附加的任何内容匹配。它甚至与任何东西都不匹配。因此,如果您想在没有任何get参数的情况下触发此路由,那么"/object/1337/"将起作用。请注意末尾的斜线。它必须在那里。

你的原始链接/object/1337?var=/hey也应该触发这个路由。

编辑:你可以在上阅读有关飞溅的信息

http://documentcloud.github.com/backbone/#Router-路由

编辑编辑:您的原始链接将使用id和"?"之间的新斜杠

/对象/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参数,然后将其传递给路由处理程序函数。

从插件的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' }
}