Попытка сделать бесконечную страницу прокрутки, которая отображает элементы как пользовательские свитки.Angular2 Meteor, выдающий бесконечный прокрутки (прокрутка к началу)
Таким образом, каждый раз, когда я обнаружить, что свиток достигает конца страницы, которую я называю
this.recordLimit += 10;
this.subscribe('movements', {limit: this.recordLimit});
и что triggeres (автозапуск)
this.autorun(h => {
if (this.ready()) {
this.items = Items.find(<potential limit filter here too>);
}
Все правильно. Это работает. Однако каждый раз, когда вызывается this.items = Items.find();
, браузер пользователя прокручивается вверх.
Потенциально это связано с тем, что элементы dom удалены, прокрутка сбрасывается, а затем элементы снова добавляются без восстановления предыдущей позиции прокрутки.
Что я делаю неправильно?
Примеры, где это 'apparenty' работает:
- https://github.com/barbatus/ng-infinite-scroll/blob/master/scroll-controller.js
- https://github.com/abecks/meteor-infinite-scroll
- http://meteorpedia.com/read/Infinite_Scrolling
@ ########### Редактировать ## ########## @
На самом деле, я заметил, что после Items.find()
a h.stop()
, чтобы остановить подписку, это работает ... Думаю, предыдущий манго-курсор обновлен с последним лимитом подписки.
Однако я до сих пор не могу понять, почему это было перекрашивать все в первоначальном случае ..
Я не понимаю, что «вы должны подписываться только на свою публикацию», точнее «нужно» и «только». Как подписывается внутри автозапуска либо хорошей практикой, либо требуется? – ATX
@ATX его из-за того, как работают наблюдатели. скажем, вы возвращаете 20 документов, а затем прокручиваете, вы изменяете лимит до 40, он не будет повторно отображать ранее извлеченные 20 документов, если вы подписаны в своем автозапуске и вернете документы НЕ в автозапуск. У меня такая же функциональность для кликов кнопок или прокрутки inifinite. – Luna
@ATX, чтобы быть более понятным, подписка возвращает документы на стороне клиента, а не в определенное место в вашем приложении, но делает их доступными на стороне клиента. Таким образом, вы авторизуете подписку, так как вы изменяете лимит.Затем публикация получает запрос, и поскольку единственным изменением является предел, он возвращает еще 20 документов. Поскольку у вас уже есть документы xx перед изменением лимита, и вы не возвращаете их внутри автозапуска, он функционирует так, как должен, и почему это «правильная» практика. – Luna