我试图弄清楚如何实现Telescopeload more
之类的功能。这是我原来的:
// 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
. 很难确定代码的哪一部分有助于防止重新呈现列表。有人可以帮忙详细解释他们是如何做到的吗?