我想在创建新活动时重新订阅ActivitySteps,否则用户无权访问该活动的新创建步骤。 我试过这个:
Activities.find().observeChanges {
added: ->
console.log 'activity added'
Meteor.subscribe 'activitySteps'
}
但是当重新订阅发生时,似乎创建的活动未在发布功能中注册。如果我尝试在那里设置一个setTimeout,以便延迟重新订阅几毫秒,当然我得到一个Meteor错误,说我不能在模拟中设置一个计时器,但它然后工作,新步骤可用!
我也试过这个:
Deps.autorun ->
Meteor.subscribe 'activitySteps', Activities.find().count()
,即使在发布函数中不需要传入的计数值,以确定当前用户应该可以使用哪些步骤。但是,当活动被删除时,这也会重新订阅,并且似乎可能不是最佳方式。
我还在Meteor文档中看到,可以观察发布函数中的变化,但这似乎相当复杂。
获得正确重新订阅的正确方法是什么?
答案 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"));
});