如何从Deps.autorun()中调用calculate.stop()?

时间:2014-02-19 05:31:21

标签: meteor

我试图阻止Deps.autorun()在条件为真后再次执行:

Deps.autorun(function(computation){

    var first_product = Collection.products.findOne({enabled:true});

    if( first_product ){
        Session.setDefault( 'purchase_dialog.selected_product_id', first_product._id );
        console.log( 'set here');
        computation.stop();
    }

});

我看到“设置在这里”很多次,它继续执行。为什么.stop()不起作用?

2 个答案:

答案 0 :(得分:2)

如果在另一个反应环境中调用Deps.autorun(例如,在Template.foo.rendered中),则每次运行父计算并且停止子计算不会停止父计算。

修复:将来自反应范围之外的Deps.autorun的呼叫移至顶层。

答案 1 :(得分:1)

致电this.stop()

Deps.autorun(function(){
    if ( somethingHappens ){
        this.stop();
    }
});

Deps.autorun(function(computation){
    if ( somethingHappens ){
        computation.stop();
    }
});