在观察者中发布其他游标
Publish additional cursors within an observer
我有一个文档是这样的。
{
_id: ObjectId,
orders: [ObjectId, ObjectId]
}
对这些订单的查找将产生类似于的结果
{
_id: ObjectId,
products: [ObjectId, ObjectId, ObjectId]
}
现在,我的出版物将找到并观察父Meteor.users
。
Meteor.publish(function () {
let handle = Meteor.users.find(this.userId).observe({
added: doc => {
// publish all orders
// publish all products within that order
},
changed: doc => { /** same as above */ }
});
this.ready();
this.onStop(() => handle.stop());
});
当这些变化时,我想修改顶层文档并发布它。也就是说:
this.changed('user', doc._id, publishRelations(doc));
这可能与流星有关吗?
您应该能够使用peerlibrary:reactive publish来实现这一点。您只需将要发布的光标包装在出版物中的自动运行中即可。只要其中一个反应依赖项(在本例中为三个游标)发生变化,就应该重新运行:
Meteor.publish("userOrders", function() {
var self = this;
self.autorun(function() {
var productIds = [];
// get logged in user
var userCursor = Meteor.users.find(self.userId);
// get orders belonging to logged in user
var ordersCursor = Orders.find({userId: self.userId});
// create array of product Ids from user's orders
// You could probably make this better by omitting duplicates
ordersCursor.forEach(function(doc, index) {
_.each(doc.products, function(productId) {
productIds.push(productId);
});
});
// get products in array
var productsCursor = Products.find({ _id: { $in : productIds } });
// return array of cursors
return [
userCursor,
ordersCursor,
productsCursor
];
});
});
相关文章:
- 如何添加浮动和非浮动,其他
- 与其他库的jQuery.noConflict()
- 播放当前视频时如何停止其他视频?JavaScript
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 除修剪外的其他功能
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- Array.length似乎不起作用;console.log则显示其他情况
- 如何消除代码中的未定义和其他问题
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- Jquery未定义函数正在停止其他操作
- 如何将我的javascript库公开给其他客户端使用
- Javascript阻止其他Javascript代码
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 如何“;过滤器”;或者以其他方式重构该数据
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- 游标坐标代码不适用于其他 JavaScript 代码
- 在观察者中发布其他游标