我定义了以下服务器端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.');
});
});
问题是,我的页面中有一个摘要部分,它重定向到另一个“项目”的topup视图。例如,我在网址/main/item1#/
,并且在此页面中,存在标记<a href="/main/item2#/topups">item 2's topups</a>
。
我希望将其重定向(页面刷新)到新的网址,但是,似乎SammyJS正在拦截/main/item2#/topups
来电,只是运行我已定义的this.get('#/topups')
路由。
我希望由于哈希之前的网址路径/main/item1
和/main/item2
不同,因此不会触发SammyJS路由。
有没有办法防止在SammyJS中发生这种行为?
答案 0 :(得分:2)
我对萨米的了解不多,但我可以告诉你路由器的行为方式,它是否在路由可能性中捕获了第一个匹配,因此,以#/ topups结尾的任何内容都将被认为是相同的只要它在哈希标志之后。
所以你最好用这种方式定义路由器:
this.get('#/topups/:item', function() {
console.log('Initializing topups view for item: '+ item);
})
然后使用以下网址调用页面:
<a href="/main/#/topups/item2">item 2's topups</a>
我希望这就是你要找的东西
答案 1 :(得分:1)
我非常确定使用完整的网址重定向你。
<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还会为您检查表单提交。每次我使用它都会让我感到震惊。 This post有解决方案。