当另一个相关集合发生变化时,如何重新订阅Meteor集合

时间:2013-03-15 16:10:10

标签: meteor

我想在创建新活动时重新订阅ActivitySteps,否则用户无权访问该活动的新创建步骤。 我试过这个:

Activities.find().observeChanges {
  added: -> 
    console.log 'activity added'
    Meteor.subscribe 'activitySteps'
}

但是当重新订阅发生时,似乎创建的活动未在发布功能中注册。如果我尝试在那里设置一个setTimeout,以便延迟重新订阅几毫秒,当然我得到一个Meteor错误,说我不能在模拟中设置一个计时器,但它然后工作,新步骤可用!

我也试过这个:

Deps.autorun ->
  Meteor.subscribe 'activitySteps', Activities.find().count()

,即使在发布函数中不需要传入的计数值,以确定当前用户应该可以使用哪些步骤。但是,当活动被删除时,这也会重新订阅,并且似乎可能不是最佳方式。

我还在Meteor文档中看到,可以观察发布函数中的变化,但这似乎相当复杂。

获得正确重新订阅的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我相信通过将参数传递给publish函数应该可以解决问题。这在我目前的项目中对我有用。

服务器

Meteor.publish("Activities", function () {
    return Activities.find({});
});

Meteor.publish("ActivitySteps", function (activityId) {
    return ActivitySteps.find({activityId: activityId});
});

客户端

Meteor.subscribe("Activities");
// I think this is now Deps.autorun but I haven't used it that way yet.
Meteor.autorun(function () {
    Meteor.subscribe("ActivitySteps", Session.get("activityId"));
});