3

我在客户端使用表来快速实时排序/过滤大约 10,000 行数据。在创建表期间向 DataTable 提供行数组比单独添加行要快得多。我可以在订阅中使用onReady 函数来实现这一点。如果我然后调用观察来获取更改,我会再次获得已经提供的数据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-当我的订阅准备好但尚未加载时

  3. 在表格的Template.table.rendered回调中执行上面的代码。

这种方法似乎更加模块化。

于 2012-10-29T05:34:25.487 回答