Backbone.js анализирует необязательную строку запроса страницы в роутере
Я медленно перемещаю свою реализацию django в рендеринг backbonejs. Django используется как запасной вариант, когда рендеринг backbonejs не может быть обработан. Об этом позаботится маршрутизатор backbonejs, используя следующий код.
Backbone.history.start({
pushState: true,
silent: true
});
$(document).on("click", "a[href^='/']", function(event) {
if (!event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) {
var url = $(event.currentTarget).attr("href").replace(/^\//, "");
var matched = _.any(Backbone.history.handlers, function(handler) {
if (handler.route.test(url)) {
return true;
}
});
if (matched) {
event.preventDefault();
application.router.navigate(url, { trigger: true });
}
}
});
По сути, если магистральные маршрутизаторы не могут справиться с этим, это откатится на рендеринг шаблона django. Но теперь я не могу поймать страницы, которые разбиты на страницы. Я определил следующую маршрутизацию.
module.exports = Backbone.Router.extend({
routes: {
'set/(?page=:page)': 'list_set'
},
list_set: function(page) {
// Do listing of set
}
});
Я бы предпочел URL с set/?page=2
чтобы быть вызванным Backbone.js. Но вышеуказанный маршрут не соответствует. Каков шаблон маршрутизации, который сделает параметр страницы необязательным, а также заставит backbonejs обрабатывать маршрутизацию?
1 ответ
Используемая схема маршрутизации была правильной. Было обнаружено, что проблема заключается в том, как была определена привязка href на html-странице.
Якорный элемент был определен следующим образом:
<a class="page" href="?page=2" data-original-title="" title="">2</a>
Значение href было ?page=2
с чего начинается ?, Но прослушиватель событий ожидал перехватить события щелчка якоря только там, где href начинается с /. Следовательно, не удалось предотвратить дефолт!