我试图阻止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()不起作用?
答案 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();
}
});