アプリケーションをビルドしましたが、mongodbからデータの初期セットをロードするのに時間がかかります。データのロードが完了するまで、loadingifを表示したいと思います。これを行うのを手伝ってくれませんか。
2 に答える
8
サブスクリプションが完了したときに呼び出される関数のコールバックSession
内で使用します。onReady()
Meteor.subscribe()
Meteor.subscribe('subscribe_to_this', function onReady(){
// set a session key to true to indicate that the subscription is completed.
Session.set('subscription_completed', true);
});
次に、このセッション値をテンプレートヘルパーから次のように返すようにします。
Template.myTemplate.isSubscriptionComplete = function(){
return Session.get('subscription_completed');
}
これで、HTMLで、データがロードされていない場合はローダーを表示したり、データのロードが完了した場合はテンプレートをレンダリングしたりするのは簡単です。
<template name="myTemplate">
{{#if isSubscriptionComplete }}
<!-- Data loading is done, so render your template here -->
{{> yourFinalTemplate}}
{{else}}
<!-- Data loading still remaining, so display loader here -->
<img src="images/load.gif">
{{/if}}
</template>
于 2013-01-05T11:50:32.717 に答える
2
これは、セッション変数を使用して実行できます。これは、開始するための単なる例です。
クライアントコード:
var yourData;
Meteor.startup(function() {
Session.set("dataLoaded", false);
});
...
// Load your initial data
yourData = SampleCollection.find(query).fetch();
Session.set("dataLoaded", true);
サンプルテンプレート:
<template name="main">
{{#if dataLoaded}}
<h1>Welcome to my application!</h1>
Your data:
{{#each yourData}}
...
{{/each}}
{{else}
<div>Loading data...</div>
{{/if}}
</template>
テンプレートヘルパー:
Template.main.dataLoaded = function() {
return Session.get("dataLoaded")
}
Template.main.data = function() {
return yourData;
}
于 2013-01-05T11:47:25.047 に答える