6

当集合在客户端上完成加载时,我需要执行特定的渲染任务。了解数据何时在客户端的集合中可用的最佳策略是什么。

我想出了这个解决方案:

Meteor.subscribe( 'alldrawings', myRendering );

function myRendering(){
  //do some no-markup stuff with the data
  //(i'm creating canvas objs and drawing on them)
}

这是这样做的方法吗?除了这个还有推荐的方法吗?

4

2 回答 2

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
    });
}
于 2015-01-03T12:34:51.357 回答
2

您当然可以使用订阅回调。AFAIK,这是唯一可能检测订阅是否已完全更新的方法。

另一种选择是使用带有集合光标的观察者:http: //docs.meteor.com/#observe。但是我认为随着数据的到达,观察者会被一个一个地不断调用,而不是在完成时(仅)一次。

于 2012-11-17T22:18:41.343 回答