在 Meteor.js 的同一路线内通过锚标记更新视图
Update view via anchor tag within the same route in Meteor.js
我一直在通过 Meteor.js 使用 URL 参数实现分页。但是当我单击锚定标签移动到新页面时,应用程序不会更新其视图。当我单击其他标签时,视图会正确更新。
该行为确实很奇怪,因为 (1) 至少它可以识别 onClick(我通过附加事件处理程序对此进行了检查)(2) 尽管在第二次尝试时更新了视图,但它必须是第三个元素。 (假设我在第1页,如果我点击第2页,它不会改变。如果我反复点击第2页,它不会改变。但是当我点击第3页时,它会改变。)
我认为问题出在 Router.route 附近,因为除了同一条路线外它工作正常。
client.js
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();
}
});
pagination.html
<template name="pagination">
<li class="page {{#if isCurrent page}}active{{/if}}">
<a href="/?page={{page}}">
{{page}}
</a>
</li>
</template>
我的 URL 方案是 domain/?page=<page_id>
。我的路线在刷新时也能正常工作。
要解决您的问题,我怀疑您需要更改在 waitOn 函数中获取当前页面的方式:
var page = this.getParams().query.page;
getParams() 是反应性的,而 this.params 不是(而且你没有使用任何一个 - 你应该通过路由器),所以路由在地址栏中发生变化但订阅不是'暂未更新。
我一直在通过 Meteor.js 使用 URL 参数实现分页。但是当我单击锚定标签移动到新页面时,应用程序不会更新其视图。当我单击其他标签时,视图会正确更新。
该行为确实很奇怪,因为 (1) 至少它可以识别 onClick(我通过附加事件处理程序对此进行了检查)(2) 尽管在第二次尝试时更新了视图,但它必须是第三个元素。 (假设我在第1页,如果我点击第2页,它不会改变。如果我反复点击第2页,它不会改变。但是当我点击第3页时,它会改变。)
我认为问题出在 Router.route 附近,因为除了同一条路线外它工作正常。
client.js
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();
}
});
pagination.html
<template name="pagination">
<li class="page {{#if isCurrent page}}active{{/if}}">
<a href="/?page={{page}}">
{{page}}
</a>
</li>
</template>
我的 URL 方案是 domain/?page=<page_id>
。我的路线在刷新时也能正常工作。
要解决您的问题,我怀疑您需要更改在 waitOn 函数中获取当前页面的方式:
var page = this.getParams().query.page;
getParams() 是反应性的,而 this.params 不是(而且你没有使用任何一个 - 你应该通过路由器),所以路由在地址栏中发生变化但订阅不是'暂未更新。