通过Meteor.js中相同路径内的锚标记更新视图

时间:2015-02-12 07:10:21

标签: javascript meteor iron-router

我一直在通过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>

我的网址方案是domain/?page=<page_id>。我的路线在刷新时也能正常工作。

1 个答案:

答案 0 :(得分:1)

要解决您的问题,我怀疑您需要更改在waitOn函数中获取当前页面的方式:

var page = this.getParams().query.page;

getParams()是被动的,而this.params不是(你也没有使用 - 你应该通过路由器),所以路由在地址栏中发生变化但是订阅没有更新。