Я прочитал множество связанных тем, но ни одна из них не дает решения.
Я пытаюсь разумно обрабатывать полосу прокрутки в своем приложении 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 нет тегов привязки, соответствующих хэшам, которые я использую.