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 начинается с /. Следовательно, не удалось предотвратить дефолт!

Другие вопросы по тегам