我定义了以下服务器端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中发生?

最佳答案

我敢肯定,使用完整的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还将为您检查表单提交。每当我使用它时,都会使我绊倒。 This post有解决方案。

09-13 01:21