2

Meteor アプリがサーバーにデプロイされると、データが mongodb から取得されるまでにかなりの時間 (3 ~ 4 秒) がかかります。私のアプリには、#each ブロック ヘルパーを介してデータにバインドされたテンプレートがあります。

{{#each items}}
    {{> item_info}}
{{else}}
    No items yet.
{{/each}}

そのため、アプリが新しいブラウザー セッションで読み込まれると、No items yetデータの読み込みが完了するまでユーザーにメッセージが表示されます。データが利用可能になると、そのメッセージは実際のデータに置き換えられます。しかし、一部のユーザーは実際にその 3 ~ 4 秒間、自分のデータが失われたと考えるため、ユーザー エクスペリエンスが低下します。

私の質問は、データのフェッチ中に「else」メッセージを「読み込み中...」のようなものに変更することは可能ですか? または、この問題に対するよりエレガントな解決策はありますか?

ありがとう。

4

1 に答える 1

5

関数内で使用Sessionする必要があると思いますonComplete()Meteor.subscribe()

これは、サブスクリプションが完了すると自動的に実行されます。つまり、コレクションのクライアントへのロードが完了します。

例えば。

Meteor.subscribe('yourCollection', function onComplete(){

         // set a session to true indicating your collection is loaded.
         Session.set('itemsLoaded', true);
});

次に、セッション値に基づいてテンプレート ヘルパーを次のように呼び出します。

Template.yourTemplate.isLoaded = function(){

     return Session.get('itemsLoaded'); 
}

html は次のようになります。

<template name="yourTemplate">
    {{#if isLoaded}}
        {{#each items}}
          {{> item_info}}
        {{/each}}
    {{/if}}

    {{#unless items}}
         <img src="images/loader.gif">
    {{/unless}}
</template>
于 2012-12-06T09:14:55.083 に答える