javascript - Sammy.js 读取路由 &,?

标签 javascript url-routing sammy.js

需要路由看起来像

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

添加到萨米

#/routeName/:param1/:param2

#/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': undefined, 'param2': undefined}”,但是如果你去“#/routeName/?param1=aaaa¶m2=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 的人,但我们在我目前的工作中使用它,这是我们迄今为止能够弄清楚的。

关于javascript - Sammy.js 读取路由 &,?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22853196/

相关文章:

javascript - Firefox 22 中的 NS_ERROR_XPC_BAD_OP_ON_WN_PROTO 异常

javascript - Node.js:拆分 n 部分的流内容

javascript - 用于显示索引 View 中页面的下 zipper 接 Rails

node.js - 在 Node.js 中组织路由

Sammy.js 异常堆栈跟踪

javascript - 如何在 Firebase 中更新用户个人资料?

javascript - 如何从jquery中的每个函数获取单选按钮索引号

python - webapp2 CRUD 路由返回 405

knockout.js - 如何防止表单提交

javascript - Sammy.js 路由 : How to wait for a library to be loaded before routing