我在客户端上使用datatables以允许快速实时排序/过滤大约10,000行数据。在表创建期间向DataTable提供行数组比单独添加行要快得多。我可以在订阅中使用onReady function来实现此目的。
如果我再拨打observe来接听更改,我会再次获取subscribe
中已提供的数据。
虽然我可以解决这个问题,但我认为我没有正确使用meteor并且感谢任何建议。
以下是一些示例代码:
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]);
}});
});
答案 0 :(得分:3)
observe
({_suppress_initial: true}
)有一个隐藏的选项可以避免此行为。我不确定使用它是否是一个好主意,但它就在那里。
关于如何构建代码的建议;它并不像它应该的那么容易,但我认为你想要的东西如下:
将您的表格包裹在{{#constant}}
帮助程序中,以便永远不会重新呈现。
确保在数据准备好之前,表格不会呈现为唯一的时间(这可能会有所帮助:https://github.com/oortcloud/unofficial-meteor-faq#how-do-i-know-when-my-subscription-is-ready-and-not-still-loading)
在表格的Template.table.rendered
回调中执行上面的代码。
这种方法似乎更模块化。