2013-01-05 23 views
1

我有在SafariSafari浏览器火灾主干航线两次

与骨干路由器头痛我有这样的一段代码:

app.navigate("ask/" + encodedSearchKey,true); 

和我的路由器:

var AppRouter = Backbone.Router.extend({ 

    routes:{ 
    "":"main", 
    "ask/*encodedSearchKey":"askSearch", 
    }, 

    askSearch:function(){ 
    ... 
    }, 
    ... 

}); 
app = new AppRouter(); 
Backbone.history.start(); 

在铬,它按预期工作,URL被路由并且askSearch函数被调用一次

但是,在Saf ARI的askSearch功能其实被执行两次

,当我试图

app.navigate("ask/" + encodedSearchKey,false); 

在Chrome预期不叫askSearch功能,但Safari浏览器,它实际上被调用一次

我已经运行通过调试器,我非常确定app.navigate行总是被调用一次,除此之外没有别的可以触发askSearch功能,除了路由器本身

现在我知道我可以通过检测浏览器类型PE,但我没有在网上发现任何类似的问题,似乎人们没有这个问题,我在这里做的事情非常错误吗?

+0

当您删除askSearch以外的所有路由时会发生什么? – hunterloftis

+0

同样的事情发生.. –

回答

0

navigate函数的第二个参数不是一个布尔而是一种选择对象:

app.navigate("ask/" + encodedSearchKey, { 
    trigger: true 
}); 
+0

这个答案是错误的。您可以传递布尔作为第二个参数作为设置触发器的快捷方式。我不知道为什么会被接受。 – DriverDan

0
在Firefox

是url没有编码的溃败将会触发两次,有时...

1

我想我刚才遇到了同样的问题,并找到了一个解决方案...... Safari似乎为了虚荣目的而从url中删除字符串,然后重新触发路由器,导致视图再次呈现,但缺少查询字符串数据。

我使用的解决方案是在路由器相当简单:

myView: function() { 
    if (window.location.search.length) { 
     myView.render(); 
    } else { 
     return false; 
    } 
} 

这将停止从2号出发渲染。虽然这个os只适用于如果你只想用查询字符串渲染该视图。