Javascript Sammy.js使用&;,读取路由;,?

Javascript Sammy.js使用&;,读取路由;,?,javascript,url-routing,sammy.js,Javascript,Url Routing,Sammy.js,需要注意的是路线看起来像 #/routeName/?param1=aaaa&param2=bbb 加上萨米 #/routeName/:param1/:param2 及 它们都不起作用我自己在Sammy.js中研究过查询参数,发现(尽管API文档中没有提到),Sammy确实支持查询参数。它只是将在路由中找到的任何查询参数添加到路由的Sammy.EventContext.params数组中。如果您有这样的路线结构: Sammy(function() { this.get("#/r

需要注意的是路线看起来像

#/routeName/?param1=aaaa&param2=bbb
加上萨米

#/routeName/:param1/:param2


它们都不起作用

我自己在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':未定义,'param2':未定义}”,但是如果你去“#/routeName/?param1=aaaa¶m2=bbb”,你会得到“{'param1':'aaaa','param2':'bbb'}”。这允许您以许多RESTAPI开发人员熟悉的方式处理可选参数


至于你的另外两条路线为什么不起作用:

#/routeName/:param1/:param2
已命名,必需参数,至少需要一个非/(正斜杠)字符才能匹配路由。至少,您必须沿着“#/runRoute/a/b”行进入一条路线,才能触发该路线的运行。如果不提供正则表达式来代替命名参数,您将很难获得想要的效果

#/routeName/?:param1&:param2
因为“?”是Sammy routes中的一个特殊字符,表示前面的字符或表达式(可以使用括号定义)是可选的,所以尾随/后面的#/routeName/是可选的。您可能会使用此路由匹配“#/routeName&b”以及“#/routeName/e&b”,在这两种情况下,param1都设置为“e”,param2都设置为“b”。由于Sammy中的查询参数规则,您不容易在路由中定义“?”,但可以使用URL转义形式“%3F”



希望这能回答你的问题,我看到了这个问题,最近也在研究类似的问题。我不会声称自己是萨米最有知识的人,但我们在目前的工作中使用了它,这就是我们迄今为止所能了解到的。

谢谢,这非常有帮助
#/routeName/?:param1&:param2