【问题标题】:Meteor refresh subscription in iron-routerIron-router 中的流星刷新订阅
【发布时间】:2015-09-21 00:51:18
【问题描述】:

我在用户集合中有 1000 多个文档。我应该每页显示 10 个用户。在onclick 事件中订阅接下来的 10 个用户。一切正常。但是当我转到另一条路线时,订阅数保持不变。

Router.js:

    Router.map(function() {
      this.route('user.india', {path: '/user/india', layoutTemplate: 'userLayout'});
      this.route('user.us', {path: '/user/us', layoutTemplate: 'userLayout'});
    });

模板

<template name="userLayout">
  {{> yield}}
  {{> _tabs}}
</template>
<template name="userIndia">
    {{#each user}}
           {{name}}
    {{/each}}
      <div id="loadMore">Load More</div>
    {{> _tabs}}
</template>
<template name="userUs">
    {{#each user}}
           {{name}}
    {{/each}}
      <div id="loadMore">Load More</div>
  {{> _tabs}}
</template>

客户

//Indian User
ITEMS_INCREMENT = 10;
Template.userIndia.created = function () {
  Session.setDefault('itemsLimit', ITEMS_INCREMENT);
  this.autorun(function () {
    this.subscription = Meteor.subscribe('user','IN', Session.get('itemsLimit'));
  }.bind(this));
};
Template.userIndia.helpers({
  Bids : function(){
    return User.find();
  }
});

//US users
ITEMS_INCREMENT = 10;
Template.userUs.created = function () {
  Session.setDefault('itemsLimit', ITEMS_INCREMENT);
  this.autorun(function () {
    this.subscription = Meteor.subscribe('user','IN', Session.get('itemsLimit'));
  }.bind(this));
};
Template.userUs.helpers({
  Bids : function(){
    return User.find();
  }
});

服务器

  Meteor.publish('user', function(country, limit) {
    return Users.find({'country':country}, { limit: limit });
  });

【问题讨论】:

  • But when I go to another route 这意味着从/user/india/user/us 路由?
  • ITEMS_INCREMENT 你是怎么设置这个值的?
  • @Sasikanth:查看我编辑的问题。
  • 还有一个问题subscription count remains same 表示当您在 /users/india 路线中时,如果限制计数为 50(假设您单击 loadmore 4 次)并且当您转到 /users/us 时,路线计数仍然50. 这是你的问题吗?
  • 请尝试我的答案并告诉我结果

标签: javascript meteor meteorite meteor-blaze


【解决方案1】:

从 cmets 继续,限制计数在路由之间保留,因为您使用 Session 变量来存储限制计数。

会话数据保留在路由之间,这意味着即使您更改路由会话值也将相同 在此处查看文档http://docs.meteor.com/#/full/session

这里有两种解决方案,您需要使用reactivevarsreactivedict

为两个不同的订阅使用两个不同的会话变量,例如

ITEMS_INCREMENT = 10;
Template.userIndia.created = function () {
  Session.setDefault('itemsLimitIndia', ITEMS_INCREMENT);
  this.autorun(function () {
    this.subscription = Meteor.subscribe('user','IN', Session.get('itemsLimitIndia'));
  }.bind(this));
};
Template.userIndia.helpers({
  Bids : function(){
    return User.find();
  }
});

//US users
ITEMS_INCREMENT = 10;
Template.userUs.created = function () {
  Session.setDefault('itemsLimitUS', ITEMS_INCREMENT);
  this.autorun(function () {
    this.subscription = Meteor.subscribe('user','IN', Session.get('itemsLimitUS'));
  }.bind(this));
};

注意我更改了会话变量名称

【讨论】:

  • 会话变量在/user/indiauser/uscreated 函数上重置。我认为问题是publish。我第一次点击/user/india 服务器在印度发布了 10 个用户。第二次我点击/user/us 所以服务器将 10 个美国用户发布到本地集合。现在我在本地集合中有 20 个用户。这就是问题。我为 inida 和 US 尝试了不同的出版商名称。现在它工作正常。
  • 好的,如果您使用两个不同的发布服务器,每次更改数据时服务器都会发布数据,使用相同的发布和您以前的代码,您可以缓存结果,而无需在每次更改路由时发送数据。只需编辑usindia 模板中的助手到 return Users.find({'country':'Us or In}, { limit: Session.get('itemsLimit') });`
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多