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

它打败了我,但我可以建议一种解决方法:不要使用handlbars的助手,并观察数据,当数据发生变化时,手动重新渲染模板,如下所示:</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();    
} 

它应该可以工作,但也许不是最好的方法,有什么想法吗?

其实我觉得meteor还有很长的路要走...

于 2012-11-03T11:05:02.163 回答