【问题标题】:Sammy.js read route with &,?Sammy.js 用 &,? 读取路由
【发布时间】:2014-04-04 03:52:11
【问题描述】:

需要路线看起来像

#/routeName/?param1=aaaa&param2=bbb

添加到萨米

#/routeName/:param1/:param2

#/routeName/?:param1&:param2

它们都不起作用

【问题讨论】:

    标签: javascript url-routing sammy.js


    【解决方案1】:

    我自己一直在 Sammy.js 中研究查询参数,并发现(尽管 API 文档中没有提到),Sammy 确实支持查询参数。它只是将它在您的路由中找到的任何查询参数添加到路由的 Sammy.EventContext.params 数组。如果您的路线结构如下:

    Sammy(function() {
        this.get("#/routeName/", function(context) {
            alert("{'param1': '" + context.params.param1 + "', 'param2': '" + context.params.param2 + "'}");
        });
    });
    

    你会发现,如果你去路由 "#/routeName/" 你会得到 "{'param1': undefined, 'param2': undefined}",但是如果你去 "#/routeName/ ?param1=aaaa&param2=bbb",你会得到 "{'param1': 'aaaa', 'param2': 'bbb'}"。这允许您以许多 REST API 开发人员熟悉的方式处理可选参数。


    至于为什么你的另外两条路线不行:

    #/routeName/:param1/:param2
    

    具有命名的必需参数,至少需要一个非/(正斜杠)字符才能匹配路由。至少,您必须沿着“#/runRoute/a/b”的路线走一条路线才能触发该路线运行。如果不提供正则表达式代替命名参数,您将无法轻松获得所需的效果。

    #/routeName/?:param1&:param2
    

    #/routeName/ 后面的 / 是可选的,因为 '?'作为 Sammy 路由中表示前一个字符或表达式(可以使用括号定义)的特殊字符是可选的。您可能会使用此路由匹配 '#/routeName&b' 和 #/routeName/e&b',其中 param1 在两种情况下都设置为 'e',而 param2 在两种情况下都设置为 'b'。由于 Sammy 中的查询参数规则,您将无法轻松定义“?”在路由中,但您可以使用 URL 转义形式 '%3F'。


    希望这能回答您的问题,我看到了这个问题,并且最近一直在研究类似的问题。我不会声称自己是对 Sammy 最了解的人,但我们在我目前的工作中使用它,这是我们迄今为止能够弄清楚的。

    【讨论】:

    • 谢谢,很有帮助
    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 2012-12-18
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多