varを変更し、Session
を介して再サブスクリプションをトリガーする場合autosubscribe
、「最新の」データがサーバーからダウンするまで待機するコールバックメカニズムはありますか?[1]
この要点を見ると、サブスクリプションの変更に応じてコレクションのコンテンツを時間の経過とともにログに記録するコードが表示されます。出力の関連セクション:
at Subscribed; comments are: first post on #1 - second post on #1
at Flushed; comments are: first post on #1 - second post on #1
at Subscription complete; comments are: first post on #1 - second post on #1 - first post on #2 - second post on #2
したがって、(a)呼び出した後でも.subscribe
、(b)呼び出しMeteor.flush
(c);のonReady
コールバック内にあります。.subscribe
コレクションにはまだ古いデータがあり、3番目のケースでのみ「正しい」データがそこにあります。
私は、リアクティブテンプレート.observe
が最終的に正しいデータを受け取り、物事が正しい状態に「落ち着く」ことを理解しています。しかし、私たちがまだそこにいないことを知る方法はありますか?
たとえば、ほとんどのmeteorサンプルアプリ(および私自身のアプリ)は、サブスクライブされたコレクションにデータが追加および削除されている間、(FOUCと同様に)少しぎくしゃくする傾向があります。サブスクリプションが「ロード中」であることがわかれば、これについて何かを行うことができます。
[1]明らかに、サーバー上のデータは絶えず変化していますが、要点でわかるように、私は(タイムアウトなしで)それが正しいポイントを見つけることができません。したがって、質問での「有効」の使用。
非常にシンプルで一般的なユースケース
madewithアプリを利用してください。最初にロードしたとき、データがネットワークに接続されてアプリが突然表示されるまで、アプリは登録されていないように見えます。
この理由は、Meteor.subscribe
呼び出されたが、データがまだネットワークに接続されていないためです。ただし、テンプレートがデータが保留中であり、「読み込み中」のテンプレートを表示する必要があることを簡単に判断する方法はありません。madewithでは、データがロードされたときに実際に何かを実行しますが、これはコールバックであるため、通常の流星の方法(つまり、リアクティブコーディング)から抜け出します。
次のようなものを書くことができれば、はるかに良いでしょう(IMO)。
{{unless apps_loaded}}{{> loading}}{{/unless}}
と
Template.madewith.apps_loaded = function() { return !Apps.isComplete(); }