Я пытаюсь понять, как реализовать функциональность load more
, например Telescope. Вот что у меня изначально:
// Iron Router
Router.route('/posts', {
name: 'posts.index',
waitOn: function () {
return Meteor.subscribe('posts', Session.get('postsLimit');
},
data: function () {
return { posts: Posts.find({}, { sort: { createdAt: -1 } }) };
},
action: function () {
this.render();
}
});
// client/views/posts_list.html
<ul>
{{#each posts}}
<li>{{ title }}</li>
{{/each}}
</ul>
<a href"#" class="load-more">Load more</a>
// client/views/posts_list.js
var POSTS_INCREMENT = 3;
Session.setDefault('postsLimit', POSTS_INCREMENT);
Template.PostsIndex.events({
'click .load-more': function (e, tmpl) {
Session.set('postsLimit', Session.get('postsLimit') + POSTS_INCREMENT);
return false;
}
}
});
Имеет смысл, что Meteor будет перерисовывать список при изменении postsLimit
. Мне просто любопытно, как Telescope сделал это без повторного рендеринга списка и отображал только новые сообщения. Из того, что я вижу из кода, вместо сохранения лимита в Session
автор использует маршрут top/:limit?
и вместо waitOn
они используют onBeforeAction
. Трудно точно определить, какая часть кода помогает предотвратить повторную визуализацию списка. Может кто-нибудь помочь подробно объяснить, как они это сделали?