Почему Backbone.js всё равно перезагружает страничку при клике по ссылкам?

К примеру, есть роутер с 2 страницами. Его делаем так:
app.Workspace = Backbone.Router.extend({
	routes: {
		'': function() {
			new app.ShuffleView();
		},
		'shuffle': function() {
			console.log('i\'am shitcoder!');
		}
	}
});
app.router = new app.Workspace();
Backbone.history.start({
	pushState: true
});

Я думал, что если pushState включен, то бекбон сам начнёт перехватывать клики по ссылкам вида /shuffle и предотвращать перезагрузку страничек, но этого не происходит. Тем не менее, роутер без pushState работает как надо и, к примеру, если в консоли ввести так:
app.router.navigate('/shuffle')
то роут срабатывает и код прописанный в роуте выполняется.

Учитывая то, что бекбон весьма минималистичный, я подумал, может они сами такое подразумевали и что я сам должен отлавливать клики по внутрисайтовым ссылкам и вызывать событие с app.route.navigate, но это же чёртов маразм, или нет?
  • Вопрос задан
  • 330 просмотров
Решения вопроса 1
Staltec
@Staltec
Node.js разработчик
На stackoverflow уже ответили: stackoverflow.com/questions/9328513/backbone-js-an...

initializeRouter: function () {
  Backbone.history.start({ pushState: true });
  $(document).on('click', 'a:not([data-bypass])', function (evt) {

    var href = $(this).attr('href');
    var protocol = this.protocol + '//';

    if (href.slice(protocol.length) !== protocol) {
      evt.preventDefault();
      app.router.navigate(href, true);
    }
  });
}


В общем вы правильно всё поняли. И это вовсе не маразм. Это "гибкость и легковесность фреймворка".

UPD:
Вот мысли почему всё именно так. Backbone не может самостоятельно решать за вас, какие ссылки считать внутренними роутами, а какие должны всё-таки вести на другие страницы. И те и другие ссылки будут выглядеть внутренними. Привила реагирования на ссылки вы должны определить сами. Backbone только решит за вас вопрос взаимодействия с history api.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы