У меня есть один маршрут Сэмми, который распознает произвольное количество параметров. Маршрут выглядит так:Sammy.js с Knockout.js Не работает маршрут с каждым изменением URL-адреса
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/
для произвольного количества параметров. Моя функция loadData
имеет значения по умолчанию для многих из этих параметров. Я уверен, что нет никакой проблемы с фактической загрузкой страниц, так как она работает 100% на многих компьютерах во многих браузерах. Тем не менее, это странное поведение в браузере Android, а также в Safari и Chrome от моего друга Mac (работает на Chrome моего ПК). Я заметил, что это браузеры Webkit.
Поведение заключается в том, что маршрут выполняется правильно для первого изменения URL-адреса, а затем для следующего изменения URL-адреса (хотя URL-адрес в строке браузера действительно всегда меняется), то он снова будет работать для третьего один, и не будет для четвертого. То есть, он работает каждый раз. Это кажется мне очень странным поведением, и я не понимаю, как отладить это. Для определенных ссылок я смог запустить взломать так, что при щелчке я установил местоположение окна в URL-адрес и принудительно выполнил код sammy с runRoute('get', url);
. Нецелесообразно добавлять это для каждого события клика на странице, и это в действительности не учитывает все изменения URL. Есть ли что-то, что я могу сделать для отладки, почему мой маршрут не запускается при каждом изменении URL-адреса?