想要建立一个主干路由,该主干路由与看起来像其所有“直观”派生词的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”:“主要”,
    “ PageName /:argument /”:“主要”,
    “ PageName /:argument / ?: params”:“ main”,
    “ PageName /:argument?:params”:“ main”
}


我觉得这条路线应该可以用一行而不是四行来表示。另外,我不需要通过发送url参数作为参数,否则我无法使其正常工作。

如何更好地指定此路线?

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

谢谢!

最佳答案

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

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

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


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

关于javascript - 具有可选的'/'和查询参数的 Backbone 路由,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12286308/

10-11 06:06