1

アプリケーションをビルドしましたが、mongodbからデータの初期セットをロードするのに時間がかかります。データのロードが完了するまで、loadingifを表示したいと思います。これを行うのを手伝ってくれませんか。

4

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