0

我定义了以下服务器端 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.');
    });
});

问题是,我的页面中有一个摘要部分,它重定向到不同“项目”的顶部视图。例如,我在 url 处/main/item1#/,并且在此页面中,存在一个 tag <a href="/main/item2#/topups">item 2's topups</a>

我希望被重定向(页面刷新)到新的 URL,但是,SammyJS 似乎正在拦截/main/item2#/topups调用并简单地运行this.get('#/topups')我定义的路由。

我希望由于哈希之前的 URL 路径/main/item1不同/main/item2,因此不会触发 SammyJS 路由。

有没有办法防止这种行为在 SammyJS 中发生?

4

2 回答 2

2

我对 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>

我希望这就是你要找的

于 2013-09-24T16:57:40.357 回答
1

我很确定使用完整的 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 还会为您检查表单提交。每次我使用它都会让我绊倒。这篇文章有解决方案。

于 2013-09-25T15:12:53.587 回答