我试图在不使用外部库的情况下在我的应用中实现分页,而且我遇到了问题。我在其中看到了一些其他主题,但它们似乎并不适用于我的用例(或者完全遇到了不同的问题)。这是我的模板。
{{#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
参数的更改并运行我的template.autorun
(下方)。我首先考虑解决此问题的方法是使用Meteor.subscribe()
返回handle
到handle.stop()
订阅。遗憾的是,似乎在此函数中,this.subscribe()
和Meteor.subscribe()
都没有返回可用于handle.stop()
订阅的实际句柄,而是返回{{1} }字符串。我不知道如何使用这个字符串,或者甚至可以使用它。
subscriptionId
我这样做了吗?任何帮助我指出正确的方向都是非常棒的 - 我一直试图让分页工作几天,并继续遇到障碍。
答案 0 :(得分:0)
我不知道会话变量是否可以存储handle
,但您可以尝试将其添加到模板实例(self
)而不是
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 = self.handle;
if (handle) {
console.dir(handle);
handle.stop();
}
self.handle = self.subscribe('postPreviews', page);
});
});