2

Meteor documentationに従って、onStop()関数は次のことを行います。

サブスクリプションが停止されたときに実行するコールバック関数を登録します。

onStop()現在、私は自分のパブリケーション内でこの関数を使用して、ユーザーがページを離れたことを追跡しようとしています。

サブスクリプションはテンプレート ルート コントローラーで呼び出され、ページを離れると公開されたコレクションを使用できないため、直接動作することを期待していました。しかし、私がここにいるのは、パブリケーションがクライアント上でアクティブでなくなったとしても、onStop()トリガーされないからです。仕組みがよくわからないので、以下に質問です。

  • onStop()ユーザーが関連付けられているルートを離れた場合、パブリケーションはトリガーされますか?
  • そうでない場合、未使用の pub/subs を停止する組み込みの Meteor メカニズムはありますか? はいの場合、どのように機能しますか? タイムアウトですか?
  • コールバックを使用/トリガーするには、Cursor.observe()またはを使用する必要がありますか?Cursor.observeChanges()onStop()
  • onStop()ブラウザーやタブを閉じたり、現在のユーザー アカウントからログアウトしたりしても、コールバックがトリガーされないのはなぜですか?
4

1 に答える 1

1

onStop()パブリケーション クエリを のに移動する必要があったため、 がトリガーされないことがわかりましたonStop()(クエリが の後ろにあるためreturn)。

ただし、私の質問に興味を持っている人もいるかもしれないので、ここに答えを示します。

ユーザーが関連付けられているルートを離れた場合、パブリケーション onStop() はトリガーされますか?

はい。ユーザーが Web サイトの別のルートに移動したり、ブラウザーのタブを閉じたり、バッテリーが切れたりしても、それは変わりません。

onStop() コールバックを使用/トリガーするには、Cursor.observe() または Cursor.observeChanges() を使用する必要がありますか?

いいえ

ブラウザやタブを閉じたり、現在のユーザー アカウントからログアウトしたりしても、onStop() コールバックがトリガーされないのはなぜですか?

実際には、これらすべてのケースでトリガーされます。onStop()ユーザーが関連するフォームに入力せず、送信せずにページを離れた場合に、アップロードされたファイルの削除を処理するために使用する基本的な出版物を次に示します。

Meteor.publish("files", function(sessionId) {
  var self = this;

  // Here I clean all the files I need to remove because the user has
  // not submitted the current form. 
  self.onStop(function () {
      console.log (sessionId + " is cleaning...");
      cleanFiles(sessionId)
  });

  // I look for files related to the current upload session only
  if(Users.isInRoles(this.userId, ["user"])) {
    return Files.find({"session_id":sessionId, "owner":this.userId}, {});
  }
  //and I make my publication available in case the if failed
  return self.ready();
});
于 2015-08-01T17:20:00.867 に答える