Как обрабатывать позицию прокрутки при изменении хэша в приложении Backbone.js?

Я прочитал множество связанных тем, но ни одна из них не дает решения.

Я пытаюсь разумно обрабатывать полосу прокрутки в своем приложении Backbone.js. Как и у многих других, у меня есть несколько хеш-маршрутов #mypage. Некоторые из этих маршрутов являются иерархическими. например У меня есть страница #list, на которой перечислены некоторые элементы, я нажимаю на элемент в списке. Затем открывается страница #view/ITEMID.

Все мои страницы имеют один и тот же раздел контента в макете HTML. При изменении навигации я добавляю новый div, представляющий представление для этого маршрута, в div Content, заменяя все, что было раньше.

Итак, теперь моя проблема:

Если элемент находится далеко внизу в списке, мне, возможно, придется прокрутить его, чтобы добраться туда.Когда я нажимаю на него, поведение Backbone по умолчанию заключается в том, что страница #view/ITEMID отображается в той же позиции прокрутки, что и представление #list. Исправить это достаточно просто; просто добавьте $(document).scrollTop(0) всякий раз, когда вводится новое представление.

Проблема в том, что если я нажму кнопку «Назад», я захочу вернуться к представлению #list в той позиции прокрутки, которая была раньше.

Я попытался найти очевидное решение этой проблемы. Хранение карты маршрутов для прокрутки позиций в памяти. Я пишу в эту карту в начале обработчика события hashchange, но до того, как новое представление фактически помещается в DOM. Я читаю с карты в конце обработчика hashchange, после того как новое представление находится в DOM.

Что я заметил, так это то, что что-то где-то, по крайней мере в Firefox, прокручивает страницу как часть события hashchange, так что к тому времени, когда мой код записи в карту вызывается, документ имеет шаткий вид. положение прокрутки, которое явно не было сделано пользователем.

Кто-нибудь знает, как это исправить, или какие рекомендации следует использовать вместо этого?

Я перепроверил и обнаружил, что в моей модели DOM нет тегов привязки, соответствующих хэшам, которые я использую.

27
задан schematic 26 June 2012 в 21:42
поделиться