Backbone переходит к базовому URL-адресу сразу после загрузки страницы

Я столкнулся с этой проблемой с маршрутизацией Backbone и решил, что потратил достаточно времени на изучение:

Здесь задействованы два URL-адреса: / и /post/:id. На странице / есть ссылки на различные сообщения через /post/:id. Когда я нажимаю на ссылку сообщения, страница сообщения загружается, но магистраль немедленно меняет URL-адрес на /. Это не только выглядит плохо, но и запускает обработчики маршрутов в неподходящее время. Я ничего особенного не делаю... вот мой код:

PostRouter = Backbone.Router.extend({
        routes : {
            "" : "doHome"
        },
        initialize : function() {

        },
        doHome : function() {
                    // do some stuff before navigating
            window.location = "/";
        }
})

...

var router = new PostRouter();
Backbone.history.start({ pushState: Modernizr.history });

Опять же, функция doHome вызывается сразу после загрузки страницы поста. Очевидно, что это заставляет сайт вернуться на домашнюю страницу. Очевидно, я могу удалить этот вызов window.location, чтобы предотвратить это, но URL-адрес все равно обновляется до корневого URL-адреса, что неприемлемо.

Заранее спасибо!

ОБНОВЛЕНИЕ 1:

Если я перейду непосредственно к «localhost:808/post/:id», URL-адрес сразу изменится на «localhost:8080/». Однако, если я делаю то же самое в приватном окне браузера, такого поведения не наблюдается.

ОБНОВЛЕНИЕ 2:

Учитывая то, что я нашел в обновлении 1, я сошел с ума и начал с нуля: я очистил 4-недельную историю просмотров (вздох), остановил свой локальный сервер и очистил все постоянные сеансы и повторно развернул свое приложение. Увы, получилось! Тем не менее, я не указываю это как решение, поскольку оно не помогает объяснить, что именно происходит и как это решить. Кроме того, меня беспокоит то, что это происходит с пользователями моего сайта. У меня не было бы возможности сказать, что это происходит, и даже если бы я знал, я не мог бы сказать им, как исправить это с их стороны (очистка 4-недельной истории браузера не вариант!). Кто-нибудь может пролить свет на то, что могло произойти?


person threejeez    schedule 13.08.2012    source источник
comment
Кажется, у вас нет маршрута, определенного для /post/:id. Это действительно так или просто ошибка в публикации вопроса?   -  person Brian Reischl    schedule 13.08.2012
comment
Это действительно так. Ссылки /post/:id на самом деле являются жесткими ссылками, которые ведут непосредственно с / на страницу сообщения. Страница сообщения на самом деле /post/:id, поэтому ей не нужно обрабатывать маршрут. Возможно, путаница в том, что я использовал базовую номенклатуру при описании URL-адреса сообщения.   -  person threejeez    schedule 13.08.2012
comment
Router не будет работать, если вы не создали его с помощью var myRouter = new PostRouter(). Я не думаю, что это причина проблемы, но стоит упомянуть.   -  person fguillen    schedule 13.08.2012
comment
Он создан в ... ;). Я добавлю его в код выше.   -  person threejeez    schedule 14.08.2012
comment
Я думаю, вы должны исправить свой пример кода, потому что, как я вижу, он будет воспроизводить рекурсивное поведение, потому что вы запускаете свое приложение в /, а обработчик doHome снова перенаправляет страницу на / через window.location.   -  person fguillen    schedule 14.08.2012


Ответы (1)


почему бы тебе не попробовать добавить

console.log(Backbone.history.handlers);

в конце, чтобы увидеть, как ваш маршрут добавляется в Backbone.history. Это может пролить свет.

person schacki    schedule 14.08.2012
comment
Сделал и получил то, что ожидал. Один маршрут: /^$/ - person threejeez; 15.08.2012