我正在制作订单,我希望用户以后能够恢复订单,因此我在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
部分。
有更聪明的方法来解决这个问题吗?
答案 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)
只是一个想法,如何在路由器上进行,即;当路由器更改并且表单未提交但有一些数据而不是将可用字段插入不完整的集合中时?