【问题标题】:Multiple Cursor Subscription in Meteor [duplicate]Meteor中的多光标订阅[重复]
【发布时间】:2016-06-07 11:41:39
【问题描述】:

美好的一天!我在流星出版物中返回两个光标。有问题的代码在这里:

Meteor.publish('members.checkedIn', function() {

let organizationId = OrganizationService.getOrganizationId(this.userId);
if (!organizationId) return this.ready();

let timeclockQuery = {
  organizationId: organizationId,
  entityType: 'member',
  timeOut: null
};

let timeclocks = Timeclock.find(timeclockQuery).fetch();

let memberIds = _.map(timeclocks, tc => {
  return { _id: tc.entityId };
});

let memberQuery = { $or: memberIds };

return Timeclock.find(timeclockQuery).count() == 0 ? 
  this.ready() : [
    Timeclock.find(timeclockQuery),
    Member.find(memberQuery)
  ];

});

尽管在我的代码中我打卡了一个成员(也就是 timeOut 字段将返回一个比以前更少的结果,因为 timeOut !== null 页面上的内容不是反应性的。这意味着当我重新导航到这个页面,我看到了预期的变化,但它并没有发生“实时”。(一旦您订阅,会员查询似乎不会改变)。我应该将其切换为 2 个单独的订阅吗?或者你们中的任何一个都可以看看我到底做错了什么?

谢谢:)

额外清晰:了解会员是否“在商店中”的唯一方法是查询 timeOut 为空的时钟(也就是他们还没有离开)

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    您基本上是在这里进行某种 JOIN 查询,当您查找一个可能会更改但不是响应式的变量时,然后您使用它来定义您的 Collection 上的查询:这不会对变量更改做出响应式.

    为了使其具有反应性,整个发布需要反应性地检查计时器变量的变化。

    为此,我使用peerlibrary:reactive-publish,这是一个可以做到这一点的包。

    https://github.com/peerlibrary/meteor-reactive-publish

    还有其他的你可以看看。

    基本用法如下:

    Meteor.publish('subscribed-posts', function () {
      this.autorun(function (computation) {
        var user = User.findOne(this.userId, {fields: {subscribedPosts: 1}});
    
        return Posts.find({_id: {$in: user && user.subscribedPosts || []}});
      });
    });
    

    因此,除了包装(并确保保留上下文(在自动运行中使用 self = this 和 self)之外,您的代码没有重大变化。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      相关资源
      最近更新 更多