【问题标题】:Backbone routes with optional '/'s and query parameters带有可选“/”和查询参数的主干路由
【发布时间】:2012-09-05 16:57:13
【问题描述】:

想要设置一个骨干路由,以匹配一个看起来像这样的 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 参数作为参数发送,如果不这样做,我就无法让它工作。

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,这可能是我应该做的。非常感谢!
    • 如何提取此示例中的查询字符串以便传递它?
    • 来自文档:“来自路由或正则表达式的每个匹配捕获都将作为参数传递给回调。”所以这两个括号模式应该传递给main处理程序。
    猜你喜欢
    • 2018-01-04
    • 2017-07-14
    • 1970-01-01
    • 2023-03-03
    • 2017-12-15
    • 1970-01-01
    • 2014-07-30
    • 2016-10-12
    相关资源
    最近更新 更多