我一直在通过Meteor.js实现URL参数的分页。但是当我点击锚定标签移动到新页面时,应用程序不会更新其视图。当我单击其他标签时,视图会正确更新。
行为真的很奇怪,因为(1)至少它识别onClick(我通过附加事件处理程序来检查)(2)尽管视图在第二次尝试时更新,但它必须是第三个元素。 (比如说我在页面上1.如果我点击第2页,它就不会改变。如果我一次又一次地点击第2页,它就不会改变。但是当我点击第3页时,它改变了。)
我认为这个问题存在于Router.route附近,因为除了相同的路线之外它还能正常工作。
Router.route('/', {
name: 'index',
template: 'index',
layoutTemplate: 'ApplicationLayout',
waitOn: function() {
var page = getQueryParams(window.location.search).page;
page = page === undefined? 1: page;
return Meteor.subscribe('recentPosts', page);
},
data: function() {
return {
posts: Posts.find({}, {
sort: {publishedAt: -1}
})
};
},
onBeforeAction: function() {
Meteor.call('postsCount', function(e, r) {
Session.set('postsCount', r);
});
this.next();
}
});
<template name="pagination">
<li class="page {{#if isCurrent page}}active{{/if}}">
<a href="/?page={{page}}">
{{page}}
</a>
</li>
</template>
我的网址方案是domain/?page=<page_id>
。我的路线在刷新时也能正常工作。
答案 0 :(得分:1)
要解决您的问题,我怀疑您需要更改在waitOn函数中获取当前页面的方式:
var page = this.getParams().query.page;
getParams()是被动的,而this.params不是(你也没有使用 - 你应该通过路由器),所以路由在地址栏中发生变化但是订阅没有更新。