我想制作一个主页,其中发布了几个数据,但只有当用户第一次访问该页面时:一个会发布最新的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});
});
}
答案 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.stringify
ied并发送给客户。
如果您需要将反应数据发送到客户端,并在以后停止推送更新,那么您最好的选择是暂时依赖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()
),然后对其进行操作。
停止订阅或发布不会破坏已发送的文档(用户不会看到最近十篇文章突然消失)。