0

Meteor と jquery データ テーブル ライブラリを使用しています。次のようなものを使用して流星/ハンドルバーをロードしているテーブルがあります。

<table>
{{each x}}
  // code to insert rows of data
{{/each}}
</table>

データが完全に入力されたら、テーブルでこれを呼び出して、並べ替え可能なテーブルに変換する必要があります。

$('#tableID').dataTable();

DOM が完全にロードされ、データがそこにあるときにコンソールから呼び出すと機能しますが、 Template.rendered() を使用しても機能せず、データがその特定の前にロードされるため、.observe で変更をリッスンしません。ビューがレンダリングされます。

このコードをどこで実行して、データが完全にロードされていることを確認できますか? また、テーブル内のデータに更新がある場合は、再度実行されますか?

4

2 に答える 2

2

個々の行をテンプレートに分割した後に機能するように見える方法を見つけました-デバッグを続けると更新されます(これは確かに理想的ではありません)。

Template.individualRow.rendered = function() {
  if (!$('#tableID').hasClass('initialized')) {
      $('#tableID').not('.initialized').addClass('initialized').dataTable();
  };
};
于 2012-11-04T19:27:14.683 に答える
1

それは私を打ち負かしますが、回避する方法を提案できます: ハンドルバーのヘルパーを使用せず、データを観察し、データが変更されたら、次のようにテンプレートを手動で再レンダリングします。</p>

<table id="tableID"></table>

<template name="yourTemplate">
    {{#each this}}
        <tr>....</tr>
    {{/each}}
</template>


var query = ...
query.observe({
    added: function () {
        manuallyRender();
    },
    changed: function () {
        manuallyRender();
    },
    ...
});
function manuallyRender() {
    // don't need Meteor.render here, because you don't need it to be reactive.
    var frag = $(Template.yourTemplate(query.fetch()));  
    $('#tableID').empty().append(frag).dataTable();    
} 

うまくいくはずですが、最善の方法ではないかもしれません。

実はメテオはまだ先が長いと思います…

于 2012-11-03T11:05:02.163 に答える