带有可选'/'和查询参数的骨干路由

时间:2012-09-05 16:57:13

标签: javascript backbone.js url-routing backbone-routing

想要设置一个匹配网址的主干路由,这个网址看起来就是这个"直观"衍生物"

Base format: http://www.domain.com/PageName/:argument
Example:     http://www.domain.com/PageName/1234567890

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

Base url:                       http://www.domain.com/PageName/1234567890
With tailing slash:             http://www.domain.com/PageName/1234567890/
Base url with query params:     http://www.domain.com/PageName/1234567890?x=1
Tailing slash and query params: http://www.domain.com/PageName/1234567890/?x=1

问题在于骨干路线变得非常难看:

routes:{    
    "PageName/:argument":           "main",
    "PageName/:argument/":          "main",
    "PageName/:argument/?:params":  "main",
    "PageName/:argument?:params":   "main"
}

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

如何更好地指定此路线?

另外,我是否正确地解决了这个问题?我觉得我开始时遇到这个问题的事实可能与对问题的更根本的误解有关。

谢谢!

1 个答案:

答案 0 :(得分:3)

您是否尝试过使用.route()和正则表达式?如果你想拥有可选的路由元素,可能是正则表达式。这意味着在.initialize()而不是routes哈希中定义路由,但它可以解决您的问题并减少代码。

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

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

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