Чета книгата „Открийте метеора“ и имам въпрос относно пагинирането (глава за пагиниране). Имам код в моя router.js:
//router.js
...
PostsListController = RouteController.extend({
template: 'postsList',
increment: 4,
postsLimit: function() {
return parseInt(this.params.postsLimit) || this.increment;
},
findOptions: function() {
return {sort: {submitted: -1}, limit: this.postsLimit()};
},
subscriptions: function() {
this.postsSub = Meteor.subscribe('posts', this.findOptions());
},
posts: function() {
return Posts.find({}, this.findOptions());
},
data: function() {
var hasMore = this.posts().count() === this.postsLimit();
var nextPath = this.route.path({postsLimit: this.postsLimit() + this.increment});
return {
posts: this.posts(),
ready: this.postsSub.ready,
nextPath: hasMore ? nextPath : null
};
}
});
...
Router.route('/:postsLimit?', {
name: 'postsList'
});
И това работи добре. Моето описание на проблема:
Имам друг маршрут ('/news') и искам да направя пагинация и за този маршрут. Как трябва правилно да разширя PostsListController, за да го направя?
Всяка моя публикация има опция за етикет, в този случай това е „новина“, така че искам да виждам само публикации с етикет „новини“. Опитах се просто да копирам-поставя този контролер (PostsListController) и:
renamed it;
set another template;
changed:
posts: function() {
return Posts.find({}, this.findOptions());
}
to:
posts: function() {
return Posts.find({postType: 'news'}, this.findOptions());
}
Не работи, на моята /страница новини мога да видя само всички мои новинарски статии и спинера. Добавен съм:
Router.route('/news/:postsLimit?', {
name: 'newsTemplate',
controller: NewsTemplateController
});
Но когато отида на /news/1, виждам всичките си публикации (не само една) и бутона „покажи още“. Мисля, че този подход за копиране и поставяне е толкова лош, но нямам идеи как да го накарам да работи правилно.