初めて Meteor アプリを作成しましたが、とても気に入っています。ただし、実際の本番データが含まれているため、少し遅くなります。「これをクリックしても何も起こらない」というレポートが表示されます。
テンプレートの再描画中に読み込みメッセージを表示して、何かが起こっていることをユーザーに知らせる方法はありますか?
さらに説明するために、このテンプレートを見てください (簡単にするために、実際のコードではありません)。
Template.all_posts.posts = function() {
return Posts.find({'category_id': Session.get('current_category')});
}
したがって、コンソールを開いてSession.set('current_category', 1)
を実行すると、計算を実行してテンプレートを再描画するのに 2 秒かかるとしましょう。その 2 秒間に読み込みインジケータを表示したいと思います。
明確にするために、私はすでに読み込みインジケーターを表示する方法を知っています。実際、私はすでに最初のページの読み込み時にそれを行っており、すべてのサブスクリプションがready()
. テンプレートが再描画されるたびに同じロジックがどこに適用されるか (読み込みアイコンの表示と非表示) を知りたいだけです。擬似コードは問題なく動作します:
要するにメテオが忙しい時はそれを反映させたい。
どんな助けでも大歓迎です!
編集 10/09/13:
ドキュメントから...
これらの Meteor 関数は、リアクティブ計算としてコードを実行します。
- テンプレート
- Meteor.render と Meteor.renderList
- Deps.autorun
考えられる解決策の 1 つは、これらの「計算」のいずれかが無効になったときに読み込みインジケーターを表示することから始めることができると思います。
たとえば、コードが の内部で実行されているDeps.autorun
場合、計算インスタンスが最初の引数として渡され、次のonInvalidate
ようにそのメソッドにコールバックを渡すことができます。
Deps.autorun(function(computation) {
// do reactive stuff
computation.onInvalidate(function() {
// display loading indicator
});
});
ただし、私の知る限り、他の Meteor メソッドでは計算オブジェクトにアクセスできませんDeps.autorun
。
ローディングインジケーターを非表示にする限り、計算の無効化により(再) レンダリングされる最後のテンプレートのコールバック内rendered
でそれを行うのが最善の方法だと思います。
これに関する洞察、提案、トリック、ハックなどはありますか?