在模板订阅中停止Meteor自动运行?

时间:2016-07-27 08:48:11

标签: meteor

我正在制作订单,我希望用户以后能够恢复订单,因此我在element.setTextString(value); 集合中创建订单并保存IncompleteOrders用户的LocalStorage中的不完整订单。

当用户返回页面时,我想阅读其LocalStorage中存储的docId,订阅docId集合,并查询其不完整的订单。

IncompleteOrders

问题是Template.order.onCreated(function(){ if (amplify.store('orders') && amplify.store('orders').docId){ //old order ID found in user's Local Storage let docId = amplify.store('orders').docId; let instance = this; instance.autorun(function(){ let subscription = this.subscribe('incompleteOrders'); if(subscription.ready()){ console.log('IncompleteOrders subscription complete!'); Session.set('orderContents', IncompleteOrders.findOne(docId)); }; }); } else { //no old order found, no need to subscribe to IncompleteOrders collection Session.set('orderContents', {}); }; }; 会话变量在代码的其他部分发生了变化,并且由于它是一个反应性数据源,它总是重新运行orderContents函数,再次订阅,并重新运行autorun回调中的Session.set部分。

有更聪明的方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您可以使用c.stop(),其中c是回调。请仔细阅读下面的代码

instance.autorun(function(c){

  let subscription = this.subscribe('incompleteOrders');

  if(subscription.ready()){
    console.log('IncompleteOrders subscription complete!');
    Session.set('orderContents', IncompleteOrders.findOne(docId));
    c.stop()
  };

});

由于

答案 1 :(得分:0)

只是一个想法,如何在路由器上进行,即;当路由器更改并且表单未提交但有一些数据而不是将可用字段插入不完整的集合中时?