为什么对我的mongodb查询的更新不能总是反映出来?

时间:2019-03-30 00:47:37

标签: meteor

我的MongoDB查询中有一个Sessions.get()。这意味着显示的集合取决于Sessions.get()值。为了让您更清楚地了解我的意思,请在下面查找查询内容:

 Template.paymentB2C.onCreated( function(){
  Session.set('pendingFilter', [ "Pending", "Failed", "Success" ]);
});

Template.paymentB2C.helpers({

    'showTransactions': function(){

        var transactions = paymentDetails.find({ 
                           paymentStatus:{$in: Session.get('Filter')} 
                           }).fetch();

        return transactions;                    
    }   

});

上面的代码显示交易列表。所显示的交易列表因交易类型而异,提示:失败,成功,待处理交易,如下所示:

0:
  payersName: "Sa Acea"
  paymentStatus: "Success"
  _id: "D3gY4BoR2tvxdK4xv"
1:
  payersName: "Paul Acea"
  paymentStatus: "Pending"
  _id: "ajCjYbLaDP7x4iAFK"
2:
  payersName: "Simon Bolton"
  paymentStatus: "Success"
  _id: "K4d6wDrjRRdSyCkhW"
因此,

I使用Filter会话值作为过滤器来指示要显示的交易类型。

我可以通过以下事件在三种过滤器之间互换。在代码下方找到。

Template.paymentB2C.events({

  'click .ShowFailedTransactions' (event, instance) {
      event.preventDefault();
      Session.set('Filter', [ "Failed" ]);
    },

  'click .ShowSuccessfulTransactions' (event, instance) {
      event.preventDefault();
      Session.set('Filter', [ "Success" ]);
    },

  'click .ShowPendingTransactions' (event, instance) {
      event.preventDefault();
      Session.set('Filter', [ "Pending" ]);
    },

});

注意,该集合中没有失败交易类型。因此,我感到很奇怪的是,每当我选择失败过滤器'click .ShowFailedTransactions'期望所期望的效果是空白页时,该页面便无法更新并继续来显示上一个查询的结果,就好像我从未单击过'click .ShowFailedTransactions'

我认为Session.set('Filter', [ "Failed" ])函数中的'click .ShowFailedTransactions'无效,因此我添加了console.log();以打印出 Filter 会话 value < / strong>,如下所示:

  'click .ShowFailedTransactions' (event, instance) {
      event.preventDefault();
      Session.set('Filter', [ "Failed" ]);
      var displaySession = Session.get('Filter');
      console.log("Filter Value is: " +displaySession );
    },

上面的代码在浏览器控制台中产生Filter Value is: Failed,表明 Filter 会话值已按预期更新。

我很困惑为什么页面无法对此进行响应/更新。

请帮助为该问题提供解决方案。

1 个答案:

答案 0 :(得分:0)

您的代码中的问题是fetch,它不是被动的!好消息是您不需要它。试试这个:

Template.paymentB2C.helpers({
  'showTransactions': function(){
    return paymentDetails.find({paymentStatus: {$in: Session.get('Filter')}});
  }
});