如何发布一段数据然后停止对它做出反应?

时间:2015-09-26 20:07:49

标签: javascript meteor

我想制作一个主页,其中发布了几个数据,但只有当用户第一次访问该页面时:一个会发布最新的10篇文章,但就是这样 - 它不会不断变化。

有没有办法让内置的pub / sub机制在经过一段时间或数量的记录或其他机制后自行关闭?

现在我正在使用一个非“关闭”的非常简单的设置:

latestNews = new Mongo.Collection('latestNews');

if (Meteor.isClient) {
  Meteor.subscribe("latestNews");
}
if (Meteor.isServer) {
  Meteor.publish('latestNews', function() {
    return latestNews.find({}, {sort: { createdAt: -1 }, limit : 10});
  });
}

1 个答案:

答案 0 :(得分:2)

在Meteor中实现的发布/订阅模式是关于响应式数据更新。在您的情况下,如果作者或文章的上次更新日期发生变化,则用户会看到此更改立即反映在其主页上。

但是您想要发送一次数据而不是再次更新它 Meteor具有处理此场景的内置功能:Methods。方法是客户端告诉服务器执行计算和/或发送纯非反应数据的方法。

rest.next

请注意,与发布相反,我们不发送Mongo.Cursor!游标中使用游标作为一种方便(又神奇)的方式告诉服务器要发送哪些数据 在这里,我们通过//Server code var lastTenArticlesOptions = { sort : { createdAt : -1 }, limit : 10 } Meteor.methods({ 'retrieve last ten articles' : function() { return latestNews.find({}, lastTenArticlesOptions).fetch() } }) 光标直接发送数据,以获得一系列文章,然后自动EJSON.stringifyied并发送给客户。

如果您需要将反应数据发送到客户端,并在以后停止推送更新,那么您最好的选择是暂时依赖pub / sub,然后手动fetch {{1} 3}}(服务器端)或publication(客户端):

stop
Meteor.publish('last ten articles', function() {
  return latestNews.find({}, lastTenArticlesOptions)
})

在服务器端,您将存储发布句柄(var subscription = Meteor.subscribe('last ten articles') //Later... subscription.stop() ),然后对其进行操作。

停止订阅或发布不会破坏已发送的文档(用户不会看到最近十篇文章突然消失)。