Sammy.js用&amp ;,读取路线?

时间:2014-04-04 03:52:11

标签: javascript url-routing sammy.js

需要路线看起来像

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

添加到sammy

#/routeName/:param1/:param2

#/routeName/?:param1&:param2

它们都不起作用

1 个答案:

答案 0 :(得分:7)

我一直在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'。


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

相关问题