Сафари запускает магистральный маршрут дважды
У меня болит голова с Backbone роутером в Safari
У меня есть этот кусок кода:
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 была вызвана не так, как ожидалось, но Safari вызывается один раз.
Я пробежал через отладчик и уверен, что строка app.navigate всегда вызывается только один раз, и нет ничего другого, что могло бы вызвать функцию askSearch, кроме самого маршрутизатора
теперь я знаю, что могу исправить это, обнаружив тип браузера, но я не нашел подобных проблем в Интернете, кажется, что у людей нет этой проблемы, я делаю что-то очень неправильно здесь?
3 ответа
navigate
Второй аргумент функции не логический, а объект option:
app.navigate("ask/" + encodedSearchKey, {
trigger: true
});
Я думаю, что я только что столкнулся с той же проблемой и нашел решение... Safari, кажется, удаляет строку из URL для тщеславных целей, это затем повторно запускает маршрутизатор, вызывая повторное отображение представления, но без данных строки запроса,
Решение, которое я использовал, было довольно простым в маршрутизаторе:
myView: function () {
if (window.location.search.length) {
myView.render();
} else {
return false;
}
}
Это останавливает 2-й рендер от продолжения. Хотя это действительно применимо только в том случае, если вы хотите отображать это представление только с помощью строки запроса.
В Firefox URL не закодирован, маршрут будет срабатывать дважды, несколько раз...