我想制作一个主页,其中发布几条数据,但只有当用户第一次访问该页面时:人们会得到最新发布的 10 篇文章,但仅此而已 - 它不会不断变化。
有没有办法让内置的发布/订阅机制在一定时间或记录数后自行关闭,或者其他机制?
现在我正在使用一个非常简单的设置,不会“关闭”:
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});
});
}
最佳答案
Meteor 中实现的发布/订阅模式都是关于响应式(Reactive)数据更新的。在您的情况下,这意味着如果文章的作者或最后更新日期发生变化,那么用户将立即看到此更改反射(reflect)在他们的主页上。
但是您希望发送数据一次并且不再更新。
Meteor 有一个内置功能来处理这种情况:Methods 。方法是客户端告诉服务器执行计算和/或发送纯非 react 数据的一种方式。
//Server code
var lastTenArticlesOptions = {
sort : {
createdAt : -1
},
limit : 10
}
Meteor.methods({
'retrieve last ten articles' : function() {
return latestNews.find({}, lastTenArticlesOptions).fetch()
}
})
请注意,与出版物相反,我们不会发送 Mongo.Cursor
!游标在出版物中用作告诉服务器要发送哪些数据的便捷(也称为魔术)方式。
在这里,我们直接通过fetch
游标来发送数据,以获得一个文章数组,该数组将是 EJSON.stringify
ied自动发送给客户端。
如果您需要向客户端发送 react 性数据,并在稍后的某个时间点停止推送更新,那么您最好的选择是暂时依赖发布/订阅,然后手动停止
publication (服务器端)或 subscription (客户端):
Meteor.publish('last ten articles', function() {
return latestNews.find({}, lastTenArticlesOptions)
})
var subscription = Meteor.subscribe('last ten articles')
//Later...
subscription.stop()
在服务器端,您将存储发布句柄 (this
),然后对其进行操作。
停止订阅或发布不会破坏已发送的文档(用户不会看到最后十篇文章突然消失)。
关于javascript - 如何发布一条数据然后停止对其使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801498/