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

问题描述 投票:0回答:1

我的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"

因此,我使用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" ]);
    },

});

请注意,集合中没有Failed事务类型。所以我觉得很奇怪,每当我选择Failed过滤器'click .ShowFailedTransactions'期望所需效果为空白空页时,页面无法更新并继续显示上一个查询的结果,就像我从未点击过'click .ShowFailedTransactions'一样。

我想也许Session.set('Filter', [ "Failed" ])函数中的'click .ShowFailedTransactions'不起作用,所以我添加了一个console.log();来打印出Filter Session值,如下所示:

  '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会话值按预期更新。

我很困惑,为什么页面不会响应/更新这个。

请帮助建议解决此问题的方法。

meteor
1个回答
0
投票

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

Template.paymentB2C.helpers({
  'showTransactions': function(){
    return paymentDetails.find({paymentStatus: {$in: Session.get('Filter')}});
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.