具有可选'/'s和查询参数

Backbone routes with optional '/'s and query parameters

本文关键字:查询 参数      更新时间:2023-09-26

希望设置一个骨干路由,该路由与一个看起来像这样的url匹配,该url是其所有"直观"衍生物"

基本格式:http://www.domain.com/PageName/:argument示例:http://www.domain.com/PageName/1234567890

在我看来,"直观"的衍生品将是所有这些网址:

基本url:http://www.domain.com/PageName/1234567890带有尾部斜线:http://www.domain.com/PageName/1234567890/带有查询参数的基本url:http://www.domain.com/PageName/1234567890?x=1尾部斜线和查询参数:http://www.domain.com/PageName/1234567890/?x=1

问题是主干路由变得非常丑陋:

路由:{"PageName/:argument":"main","PageName/:argument/":"main","PageName/:argument/?:params":"main","PageName/:参数?:params":"main"}

我觉得这条路线应该可以用一行来表达,而不是用四行来表达。此外,我不需要将url参数作为参数发送,我只是无法在不这样做的情况下使其工作。

如何更好地指定此路线?

此外,我是否错误地处理了这个问题?我觉得我一开始就有这个问题可能与对这个问题的更根本的误解有关。

谢谢!

您尝试过使用.route()和regex吗?如果您想拥有可选的路由元素,那么regex可能是您的选择。这意味着用.initialize()而不是routes散列来定义路由,但这将解决您的问题,并且涉及更少的代码。

我还没有测试过,但我认为它看起来像:

initialize: function(options) {
    this.route(/PageName'/([^'/'?]+)'/?'??(.*)/, "main");
}

(测试正则表达式暴露了一个小问题:params参数会得到一个空字符串,而不是undefined。但这可能对你来说不是问题。)