1

次のテンプレートがあります。

<template name="datatable">
  <table class="table table-hover">
    <thead>
      <tr>
        <th>Path</th>
        <th>Average</th>
      </tr>
    </thead>
    <tbody>
      {{#each entries}}
        <tr>
          <td>{{path}}</td>
          <td>{{avg}}</td>
        </tr>
      {{/each}}
    </tbody>
  </table>
</template>

また、エントリには次の情報が入力されます:

Template.datatable.entries = ->
  Metrics.find( { metric: 'mean' }, { fields: { path: 1, avg: 1 }, sort: { avg: -1 }, limit: 10 })

2 つの問題:

1) ページを更新すると、10 個の並べ替えられたリストが表示されるまで、テーブルの行が非常に速く変化するのがわかります。まるでクライアントがすべてのデータを受信し、表示および並べ替えを行っているかのようです。私が得られるのは、クライアントがサーバーから 10 行しか受信しないということです。

2) サーバーがコレクションを更新すると、サーバーが更新を完了するまでクライアントがフリーズします。

この2つの問題を解決するにはどうすればよいですか?

4

1 に答える 1

2
  1. あなたは部分的に正しいです。クライアントは、サーバーからのデータをそのまま処理しています。ただし、 を呼び出しfindたときではなく、subscribeが呼び出されたときに発生します。ページを更新すると、サーバーへの新しい接続と新しいサブスクリプションが作成されます。サブスクリプションを使用ready()して、初期データが到着するのを待つことができます。ドキュメントを参照してください。サブスクリプションの状態を自分で処理したくない場合はIronRouter、データが到着するのを待つ組み込みの方法があります (ルーターの使用がやり過ぎでない場合)

  2. 奇妙に聞こえます。クライアントは、サーバーがクライアントにデータを送信するまで、サーバーが更新中であることを伝える方法を持たない必要があります。これが発生すると、#1 の動作が発生するはずです。ソートに時間がかかるクライアントに送信するデータが多すぎるか、データの大きなチャンクを更新していると思います。詳細または実際の例が役立つ場合があります。

于 2013-09-05T04:48:56.463 に答える