Я пытаюсь реализовать разбиение на страницы в своем приложении без использования внешних библиотек, и у меня возникают проблемы. Я видел несколько других тем по этому поводу, но они, похоже, не применялись к моему варианту использования (или вообще возникали разные проблемы). Вот мой шаблон.Meteor отписаться от Collection on Client
{{#if Template.subscriptionsReady}}
{{#each posts}}
{{> postPreview}}
<hr>
{{/each}}
{{else}}
{{> spinner}}
{{/if}}
<!-- Pager -->
<ul class="pager">
{{#if showNewerPostsButton}}
<li class="previous previousButton">
<a>← Newer Posts </a>
</li>
{{/if}}
{{#if showOlderPostsButton}}
<li class="next nextButton">
<a>Older Posts →</a>
</li>
{{/if}}
</ul>
В принципе так оно и должно работать в том, что, когда пользователь нажимает одну из кнопок, сервер должен получить следующие элементы в наборе записей и «идеально» обновить подписку, чтобы соответствовать. У меня возникли проблемы с тем, что набор записей подписки соответствует тому, что я хочу: похоже, Meteor ведет сбор записей с каждой новой подпиской.
Template.postsList.events({
'click .nextButton': (e) => {
let page = parseInt(FlowRouter.getParam('page'));
if (page === undefined || isNaN(page)) {
page = 0;
}
FlowRouter.setParams({ page: page + 1 });
},
'click .previousButton': (e) => {
let page = parseInt(FlowRouter.getParam('page'));
if (page === undefined || isNaN(page) || page < 1) {
page = 1;
}
FlowRouter.setParams({ page: page - 1 });
},
});
Прямо сейчас, когда я нажимаю кнопку, что я уверен, что происходит в Meteor видит мое изменение в FlowRouter
Params и работает мой template.autorun
(ниже). Моей первой мыслью решить эту проблему было использование Meteor.subscribe()
с возвратом handle
в handle.stop()
подписки. К сожалению, кажется, что внутри этой функции оба и Meteor.subscribe()
не возвращают фактический дескриптор, который может быть использован для подписки handle.stop()
и вместо этого возвращает строку subscriptionId
. Я не знаю, как использовать эту строку, или даже если можно ее использовать.
Template.postsList.onCreated(function() {
var self = this;
self.autorun(function() {
var page = parseInt(FlowRouter.getParam('page'));
if (page == undefined || page < 0 || isNaN(page)) {
page = 0;
}
var handle = Session.get('postPreviewsHandle');
if (handle) {
console.dir(handle);
handle.stop(); // Error! Function doesn't exist because this is only a string
}
// Meteor.subscribe() behaves the same way here
handle = self.subscribe('postPreviews', page);
Session.set('postPreviewsHandle', handle);
});
});
Имею ли я это право? Любая помощь в том, чтобы указывать на меня в правильном направлении для этого, была бы супер фантастической - я пыталась получить разбивку на страницы, работающую пару дней и продолжаю сталкиваться с препятствиями.
Спасибо за ответ! К сожалению, вызов 'subscribe()' AT ALL внутри 'autorun()' заставляет Meteor возвращать строку. Из-за этого Afaik не может «остановить()» подписку на уровне шаблона вручную. – deathgaze