3

を使用して、約 10,000 行のデータをリアルタイムで並べ替え/フィルタリングできるようにしています。行を個別に追加するよりも、テーブルの作成中に DataTable に行の配列を提供する方がはるかに高速です。これを実現するために、subscribe でonReady 関数を使用できます。その後、 observeを呼び出して変更を取得すると、既に提供されているデータがsubscribe再び取得されます。

を正しく使用していないだけだと思います。アドバイスをいただければ幸いです。

サンプルコードは次のとおりです。

Meteor.subscribe("books", function(){
    // Runs when subscription is complete
    var mData = Books.find().fetch();

    MyTable = $('#testTable').dataTable( {
        'aoColumns': [
            { sTitle: 'title', sClass: 'alignRight', mDataProp: 'title'},
        ],
        'aaData' : mData
    });
    // Add any new books.
    Books.find().observe({added: function(item){
        // ERR: Adds the books already fetched into mData as well as any new books.
        MyTable.fnAddData([item]);
    }});
});
4

1 に答える 1

3

observe( {_suppress_initial: true}) には、この動作を回避する隠しオプションがあります。それを使用するのが良い考えかどうかはわかりませんが、そこにあります。

コードの構造に関するアドバイスについては、本来あるべきほど簡単ではありませんが、次のようなことが必要だと思います。

  1. テーブルをヘルパーでラップして、{{#constant}}再レンダリングされないようにします。

  2. データの準備が整うまで、テーブルが一度だけレンダリングされないようにしてください (これが役立つ場合があります: https://github.com/oortcloud/unofficial-meteor-faq#how-do-i-know- when-my-subscription-is-ready-and-not-まだ-loading )

  3. テーブルのTemplate.table.renderedコールバックで上記のコードを実行します。

そのアプローチは、よりモジュール化されているようです。

于 2012-10-29T05:34:25.487 に答える