我想创建一个主页,发布几条数据,但只有当用户第一次访问该页面时,才会发布:一篇最新的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});
});
}发布于 2015-09-26 21:15:29
在Meteor中实现的pub/sub模式都是关于反应性数据更新的。在您的情况下,这意味着如果文章的作者或最后更新日期更改,用户将立即在其主页上看到此更改。
但是,您希望只发送一次数据,而不希望再次更新数据。
Meteor有一个内置的功能来处理这个场景:方法。方法是客户端告诉服务器执行计算和/或发送纯非反应性数据的一种方法。
//Server code
var lastTenArticlesOptions = {
sort : {
createdAt : -1
},
limit : 10
}
Meteor.methods({
'retrieve last ten articles' : function() {
return latestNews.find({}, lastTenArticlesOptions).fetch()
}
})注意,与出版物相反,我们不发送Mongo.Cursor!在发布中使用游标作为一种方便(也称为魔术)的方式来告诉服务器要发送哪些数据。
在这里,我们通过对光标的fetch直接发送数据--数据,以获得一组文章,然后这些文章将自动被简易爆炸装置发送到客户端。
如果您需要向客户端发送反应性数据,并在稍后的某个时间点停止推送更新,那么您最好的选择是暂时依赖于pub/sub,然后手动地stop 出版 (服务器端)或订阅 (客户端):
Meteor.publish('last ten articles', function() {
return latestNews.find({}, lastTenArticlesOptions)
})var subscription = Meteor.subscribe('last ten articles')
//Later...
subscription.stop()在服务器端,您将存储发布句柄(this),然后对其进行操作。
停止订阅或发布不会破坏已经发送的文档(用户不会看到最后十篇文章突然消失)。
https://stackoverflow.com/questions/32801498
复制相似问题