首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sammy.js读取路由与??

Sammy.js读取路由与??
EN

Stack Overflow用户
提问于 2014-04-04 03:52:11
回答 1查看 3.2K关注 0票数 3

需要路线看起来就像

代码语言:javascript
复制
#/routeName/?param1=aaaa&param2=bbb

加进萨米

代码语言:javascript
复制
#/routeName/:param1/:param2

代码语言:javascript
复制
#/routeName/?:param1&:param2

它们都不起作用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-05 21:23:22

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

代码语言:javascript
复制
Sammy(function() {
    this.get("#/routeName/", function(context) {
        alert("{'param1': '" + context.params.param1 + "', 'param2': '" + context.params.param2 + "'}");
    });
});

您会发现,如果您转到路由"#/routeName/“,您将得到”{‘氢1’:未定义的,‘aaaa 2’:未定义的}“,但是如果您转到”#/routeName/?氢1=aaaa m2=bbb“,则会得到”{‘aaaa 1’:'aaaa',‘aaaa 2’:'bbb'}“。这允许您以许多REST开发人员熟悉的方式处理可选参数。

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

代码语言:javascript
复制
#/routeName/:param1/:param2

已指定所需参数,该参数至少需要一个非/(正斜杠)字符才能匹配路由。至少,您必须沿着“#/ running /a/b”的路线运行,才能从运行中触发该路由。在不提供正则表达式代替命名参数的情况下,很难获得所需的效果。

代码语言:javascript
复制
#/routeName/?:param1&:param2

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

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22853196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档