Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor.js我如何知道我的收藏已准备就绪_Javascript_Meteor - Fatal编程技术网

Javascript Meteor.js我如何知道我的收藏已准备就绪

Javascript Meteor.js我如何知道我的收藏已准备就绪,javascript,meteor,Javascript,Meteor,当集合在客户端上完成加载后,我需要执行特定的呈现任务。了解客户机上收集的数据何时可用的最佳策略是什么 我想出了这个解决方案: Meteor.subscribe( 'alldrawings', myRendering ); function myRendering(){ //do some no-markup stuff with the data //(i'm creating canvas objs and drawing on them) } 这样做吗?除此之外,还有推荐的方法吗

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

我想出了这个解决方案:

Meteor.subscribe( 'alldrawings', myRendering );

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

这样做吗?除此之外,还有推荐的方法吗?

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


另一个选项是使用具有集合游标的观察者:。但我认为,当数据到达时,观察者会被一个接一个地不断调用,而不是在完成时(仅一次)。

您可以自己设置一个反应变量:

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
    });
}