允许带有哈希的 href 链接绕过 SammyJS 路由
Allowing href links with hashes on them to bypass SammyJS routing
我定义了以下服务器端 URL 映射:
/main/item1
/main/item2
我添加了SammyJS路由支持,以便我能够执行以下操作:
/main/item1#/ /* main view */
/main/item1#/topups /* topup view */
我已经像这样设置了SammyJS:
s.app = Sammy(function() {
this.get('#/topups', function() {
console.log('Initializing topups view.');
});
this.get('#/', function() {
console.log('Initializing main view.');
});
});
问题是,我的页面中有一个摘要部分,该部分重定向到不同"项目"的顶部视图。 例如,我在网址/main/item1#/
,并且在此页面中,存在一个标签<a href="/main/item2#/topups">item 2's topups</a>
。
我希望被重定向(页面刷新)到新的URL,但是,似乎SammyJS正在拦截/main/item2#/topups
调用并简单地运行我定义的this.get('#/topups')
路由。
我希望由于哈希、/main/item1
和/main/item2
之前的 URL 路径不同,因此不会触发 SammyJS 路由。
有没有办法防止这种行为在SammyJS中发生?
我对 Sammy 了解不多,但我可以从任何路由器的行为方式告诉你,它是在路由可能性中捕获第一个匹配项,因此,任何以 #/topups 结尾的内容都将被视为相同,只要它在哈希符号之后。
因此,您最好以这种方式定义路由器:
this.get('#/topups/:item', function() {
console.log('Initializing topups view for item: '+ item);
})
然后调用具有类似 URL 的页面:
<a href="/main/#/topups/item2">item 2's topups</a>
我希望这就是你要找的
我很
确定使用完整的URL重定向您。
<a href="http://www.example.com/main/item2#/topups">Item 2 top ups for the lazy coder</a>
但是,这将导致页面重新加载。如果你修改Labib的答案,你可以得到一个更好的解决方案:
this.get('#/topups/:item', function () {
console.log('Doing some post processing on current item');
console.log('Now redirecting you to ' + this.params.item);
window.location.href = 'http://example.com/menu/# + this.params.item +#/topups';
});
同样,这将导致页面重新加载,但如果您不介意,那么只需使用任何一种方法。
注意:Sammy还将为您检查表单提交情况。每次使用它时,这都会让我感到困惑。这篇文章有解决方案。
相关文章:
- Emberjs应用程序加载在除Index之外的所有路由上
- 正在使用$location.path(.)路由ng视图
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- 未激发路由的控制器属性上的观察者
- AngularJS ui路由器html5模式中断路由
- 发送json对象或使用express路由呈现视图
- 使用主干网和rails的静态页面路由
- 如何使用Passport保护路由终结点
- 有没有办法用routerLink/router.navigation附加查询/路由参数
- Nodejs和express路由,如何处理客户端的承诺
- TinyMCE实例在切换角度路由选项时会消失
- 什么'在Express中路由时,应用程序级中间件和路由器级中间件之间的区别是什么
- 使用Ampersand.js路由模块化应用程序
- Angular 2路由已弃用:如何检测CanActivate
- 格式化获取请求的路由
- 在node-js路由中发出http请求
- 无法运行php代码,有角度路由问题
- 使用SammyJS和requireJS来路由模块
- 允许带有哈希的 href 链接绕过 SammyJS 路由
- Sammyjs路由不适用于Phonegap