我对Safari中的Backbone路由器感到头疼
我有这段代码:
app.navigate("ask/" + encodedSearchKey,true);
并在我的路由器中:
var AppRouter = Backbone.Router.extend({
routes:{
"":"main",
"ask/*encodedSearchKey":"askSearch",
},
askSearch:function(){
...
},
...
});
app = new AppRouter();
Backbone.history.start();
在chrome中,它按预期工作,URL被路由并且一次调用askSearch函数
然而,在Safari中,askSearch函数实际上被执行了两次
当我尝试
时app.navigate("ask/" + encodedSearchKey,false);
在chrome中,没有按预期调用askSearch函数,但实际上它被调用了一次
我已经浏览了调试器并且非常确定app.navigate行总是只被调用一次,除了路由器本身之外没有任何其他东西可以触发askSearch函数
现在我知道我可以通过检测浏览器类型来解决这个问题,但我没有在网上发现任何类似的问题,似乎人们没有这个问题,我在这里做错了什么?
答案 0 :(得分:1)
我想我刚遇到同样的问题并找到了一个解决方案...... Safari似乎从虚拟目的中剥离了字符串以用于虚荣目的,然后重新触发路由器导致视图再次呈现但缺少查询字符串数据。
我在路由器中使用的解决方案相当简单:
myView: function () {
if (window.location.search.length) {
myView.render();
} else {
return false;
}
}
这会阻止第二个渲染继续进行。虽然只有在你想要用查询字符串渲染该视图时,这个os才真正适用。
答案 1 :(得分:0)
navigate
函数的第二个参数不是布尔值,而是选项对象:
app.navigate("ask/" + encodedSearchKey, {
trigger: true
});
答案 2 :(得分:0)
是url未编码,溃败会发射两次,有时...... ...