Browser Sammy.js with Knockout.js没有在每次URL更改时运行路由

Browser Sammy.js with Knockout.js没有在每次URL更改时运行路由,browser,knockout.js,webkit,routes,sammy.js,Browser,Knockout.js,Webkit,Routes,Sammy.js,我有一个Sammy路由,可以识别任意数量的参数。路线如下所示: get(/^\/(?:\?[^#]*)?#page\/?((?:[^\:\/]+\:[^\:\/]+\/?)*)$/g, function() { var params = {}; var splat = this.params.splat[0]; var re = /([^\:\/]+)\:([^\:\/]+)/g; match = true while(match = re.exec(sp

我有一个Sammy路由,可以识别任意数量的参数。路线如下所示:

get(/^\/(?:\?[^#]*)?#page\/?((?:[^\:\/]+\:[^\:\/]+\/?)*)$/g, function() {
    var params = {};
    var splat = this.params.splat[0];
    var re = /([^\:\/]+)\:([^\:\/]+)/g;
    match = true
    while(match = re.exec(splat)) {
        params[match[1]] = match[2];
    }
    self.loadData(params);
});
这个代码有效。它所做的是识别任意数量参数的模式
#page/param1:value1/param2:value2/
的路由。My
loadData
函数具有许多这些参数的默认值。我相信页面的实际加载没有问题,因为它在许多浏览器的许多计算机上100%工作。然而,它在我的Android浏览器和我朋友的Mac的Safari和Chrome(在我电脑的Chrome上工作)上有奇怪的行为。我注意到这些是Webkit浏览器


其行为是,路由在第一次URL更改时正确运行,而在下一次URL更改时不会正确运行(尽管浏览器栏中的URL确实总是更改),然后它将在第三次URL更改时再次运行,而在第四次URL更改时则不会。也就是说,它每隔一段时间就工作一次。这对我来说似乎是非常奇怪的行为,我不知道如何调试它。对于某些链接,我能够运行一个hack,在单击时,我将窗口位置设置为URL,并使用
runRoute('get',URL)强制运行sammy代码。在页面上的每个点击事件中都要添加这个是不切实际的,而且这并不能解释所有的URL更改。我可以做些什么来调试为什么我的路由没有在URL每次更改时都运行?

对于遇到类似行为的人,在上述浏览器中每隔单击一次,
this.params.splat
未定义。它应该设置为URL的匹配部分(例如,
/#page/param1:value1/

我想出的解决方法是将此添加到get路线的顶部:

if(this.params.splat === undefined) {
    app.unload().run();
    return;
}
这并不是问题的根源,它只是一个黑客,允许它重新运行路由,以便下次通过时不会未定义
params.splat
。如果有人对正在发生的事情有更多的信息,我很感兴趣