1

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

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

但是当重新订阅发生时,创建的活动似乎没有向发布功能注册。如果我尝试在其中设置 setTimeout 以将重新订阅延迟几毫秒,那么我当然会收到 Meteor 错误,说我无法在模拟中设置计时器,但是它可以工作并且新步骤可用!

我也试过这个:

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

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

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

实现正确重新订阅的正确方法是什么?

4

1 回答 1

2

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

服务器

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"));
});
于 2013-03-24T14:56:32.147 回答