当组合后退按钮和history.replaceState时,Sammy失去了对路由的控制

时间:2016-06-17 00:22:30

标签: sammy.js

我遇到Sammy路由问题,并将后退按钮与history.replaceState结合使用。是否有另一种方法可以在不添加历史堆栈的情况下替换浏览器的URL,并触发除history.replaceState以外的Sammy路由?

history.replaceState最初会触发Sammy路线,但如果我使用history.pushState,然后点击后退按钮,然后点击history.replaceState,它就不会触发Sammy路线。

如果我将location.hashlocation.hrefhistory.replaceState结合使用,它似乎也会中断

我想使用replaceState来控制表的分页和排序,但让标准历史记录堆栈适用于不同的搜索参数并导航到不同的页面并返回搜索屏幕。

编辑:我正在研究如何在不触发路由的情况下设置Sammy的内部URL。

1 个答案:

答案 0 :(得分:0)

遇到同样的问题。解决:

history.replaceState(path);
sammy.setLocation(path);

首次更新浏览器历史记录(萨米不会触发位置更改)

第二次让萨米(Sammy)用新的途径提出事件。

还需要自定义路由逻辑:

Sammy.mapRoutes([{'get': 'myPath', callback}]) 

回叫应该解析新路径,并且如果仅在'?'之后的参数更改符号,然后将这些参数传递给viewModel的方法。

然后在此方法内,您可以处理如下更改:

public onParamsChanged({page}) {
    this.myTable.setPage(page);
}