2

想要设置一个与看起来像这样的 url 匹配的主干路由,以及它的所有“直观”衍生产品”

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

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

基本网址:http://www.domain.com/PageName/1234567890
带尾斜线:http://www.domain.com/PageName/1234567890/
带有查询参数的基本网址: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/:argument?:params": "main"
}

我觉得这条路线应该可以用一行而不是四行来表示。此外,我不需要将 url 参数作为参数发送,如果不这样做,我就无法让它工作。

我怎样才能更好地指定这条路线?

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

谢谢!

4

1 回答 1

3

您是否尝试过使用.route()和正则表达式?如果你想有可选的路由元素,正则表达式可能是要走的路。这意味着定义你的路由.initialize()而不是routes散列,但它会解决你的问题并且涉及更少的代码。

我没有对此进行测试,但我认为它看起来像:

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

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

于 2012-09-05T17:23:26.870 回答