在 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 不是(而且你没有使用任何一个 - 你应该通过路由器),所以路由在地址栏中发生变化但订阅不是'暂未更新。