使用meteor subscribe onReady函数,然后在重复数据中观察结果

时间:2012-10-24 18:34:49

标签: datatables meteor publish-subscribe

我在客户端上使用以允许快速实时排序/过滤大约10,000行数据。在表创建期间向DataTable提供行数组比单独添加行要快得多。我可以在订阅中使用onReady function来实现此目的。 如果我再拨打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]);
    }});
});

1 个答案:

答案 0 :(得分: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-still-loading

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

  4. 这种方法似乎更模块化。