javascript - 当发布的光标基于另一个集合内容时,如何构建响应式(Reactive)发布?

标签 javascript mongodb meteor meteor-publications

我有两个收藏 itemsworksheet .

每个工作表都有一个 item我存储所有工作表的数组字段 items _ID。基于此字段,我发布当前工作表的项目。该出版物如下所示:

 Meteor.publish("get_items", function(worksheetId) {
    var currentWorksheet = Worksheets.findOne(worksheetId); 
        if (currentWorksheet.items) {
            return Items.find({"_id":{$in:currentWorksheet.items}}, {});
        } else {
            console.log("no item to send");
            return Items.find({"_id":null}, {});
        }
    }
    return this.ready();
});

此出版物已在当前页面iron-router Controller 中订阅。

问题是这样的:

我使用具有模板级订阅的专用组件来更改当前工作表 items field 。该组件被加载到引导箱中。

当我更改当前工作表时items领域,我的主要出版物不会更新以考虑这些变化。但是,如果我重新加载页面,则会考虑更改。

我应该如何设计我的出版物,使其在依赖于另一个集合的情况下保持响应性?

最佳答案

您可以按如下方式使用 Meteor.publishComposite()

Meteor.publishComposite('itemsByWorksheet', function (params) {
    check(params, {
        worksheetId: String
    });

    var worksheetId = params.worksheetId;
    return {
        find: function () {
            return Worksheets.find({ worksheetId: worksheetId })
        },
        children: [
            {
                find: function (worksheet) {
                    return Items.find({_id: {$in: worksheet.items}})
                }
            }
        ]
    }
});

这将创建一个响应式(Reactive)发布,该发布将根据原始工作表发布中的更改订阅项目。

对于此解决方案,您将需要来自大气的以下包:https://atmospherejs.com/reywood/publish-composite

您的订阅将如下所示:

Meteor.subscribe('itemsByWorksheet', {worksheetId: "<worksheet id goes here>"});

关于javascript - 当发布的光标基于另一个集合内容时,如何构建响应式(Reactive)发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32567459/

相关文章:

python - 在 PyMongo 中查询数组

javascript - Meteor 1.0 - 使用变量作为键的 Mongo 查询,包括 $inc

node.js - meteor 构建后启动失败

javascript - 如何防止滚动绑定(bind)到同一容器的其他元素?

单击音频播放的 Javascript 延迟

javascript - node.js 是 Perl 和 Python 等传统脚本语言的可行替代方案吗?

node.js - Express.js 在 MEAN 堆栈中做了什么?

mongodb - openshift 上的 jbossews 日志显示 com.mongodb.CommandFailureException :{ "serverUsed" :"127.xx2.xxx.xx0:27017" ,"ok":0. 0 ,"errmsg":"unauthorized"}

javascript - 删除 Discover Meteor Book 中的 URL 字段

javascript - 使用 innerHTML 时换行