我如何发布一段数据,然后停止对它的反应
How do I publish a piece of data and then stop reacting to it?
我想做一个主页,其中发布了几条数据,但只有当用户第一次访问该页面时:一个人会得到最近发布的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});
});
}
在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
光标直接发送数据,以获得文章数组,然后将自动EJSON.stringify
并发送到客户端。
如果您需要向客户端发送响应性数据,并在稍后的时间点停止推送更新,那么您最好的选择是暂时依赖于发布/订阅,然后手动stop
发布(服务器端)或订阅(客户端):
Meteor.publish('last ten articles', function() {
return latestNews.find({}, lastTenArticlesOptions)
})
var subscription = Meteor.subscribe('last ten articles')
//Later...
subscription.stop()
在服务器端存储发布句柄(this
),然后对其进行操作。
停止订阅或发布不会破坏已经发送的文档(用户不会看到最近的十篇文章突然消失)。
相关文章:
- AngularJS加载JSON数据,然后从中解析/加载HTML
- 构建空图表,然后设置它's数据
- 如何使用javascript验证表单中的数据,然后调用php页面
- 使用JavaScript或AJAX从HTML表单中提取数据,然后将其传递给PHP
- 如何在状态输入ui路由器时立即显示模板,然后当承诺被解决时显示数据
- 在输入字段中选择一个值,然后用相应的数据填充另一个字段
- 如何将 Oracle 数据转换为 JSON,然后在 JavaScript 中使用
- Angular js,在选择元素上,我想 POST 数据以将其保存在数据库中,然后我想使用 PUT 更新它而无需重新加载
- 将普通的 PNG 图像转换为 JSON 数据,然后存储到对象
- 从select中选择一个选项,然后使用Codeigniter在另一个选择框上显示数据
- jquery替换DIV数据,然后跟踪对它的点击
- 如何从网站获取数据,然后显示在英特尔 XDK 页面中
- 从页面上点击的链接中删除数据,然后移动到下一页&在CasperJS中重复
- 使用AJAX获取JSON数据,然后通过HTML上的ElementID输出数据
- 使用 jquery 从 php 获取数据,然后再次传递给 php
- 如何将数据保存在一个 HTML 页面中,然后在 Phonegap 中的另一个 HTML 页面上显示
- JQuery 暂停表单提交,添加帖子数据,然后提交
- PHP Yii-单击列表然后显示模式中单击的列表的完整数据
- 等待加载的数据,然后在 AngularFire 0.9.0 中返回
- 如何用数据预加载表单(新操作),然后在Ruby on Rails中提交