Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干网是否可以创建一个与所有URL匹配的路由?_Javascript_Backbone.js_Url Routing - Fatal编程技术网

Javascript 主干网是否可以创建一个与所有URL匹配的路由?

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); } 我相

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

问题是,我可以接收包含任何内容的get参数,包括斜杠,然后主干不识别这个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也应该触发此路由

编辑:您可以在

编辑:原始链接将使用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
调用。