当Collection在客户端上完成加载时,我需要执行特定的渲染任务。什么是了解客户端集合中数据何时可用的最佳策略。
我想出了这个解决方案:
Meteor.subscribe( 'alldrawings', myRendering );
function myRendering(){
//do some no-markup stuff with the data
//(i'm creating canvas objs and drawing on them)
}
这是这样做的吗?除此之外是否有推荐的方法?
答案 0 :(得分:3)
您可以自行设置反应变量:
alldrawingsReady = new ReactiveVar(false);
Meteor.subscribe('alldrawings', function() {
alldrawingsReady.set(true);
});
Tracker.autorun(function(){
if(!alldrawingsReady.get()) {
return;
}
// Do some no-markup stuff with the data
// (eg. creating canvas objs and drawing on them)
});
如果你需要准备一个和集合,请使用:
Template.my_template.rendered = function() {
this.autorun(function(){
if(!alldrawingsReady.get()) {
return;
}
// Do some DOM manipulations based on the data
});
}
答案 1 :(得分:2)
您当然可以使用订阅回调。 AFAIK,如果订阅已完全更新,这是唯一可能的检测方法。
另一个选择是使用带有集合光标的观察者:http://docs.meteor.com/#observe。但是我认为随着数据的到来,观察者会被一个接一个地调用,而不是一次完成(仅限)。