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 に答える