使用日期范围Meteor进行动态订阅

时间:2016-05-17 13:36:48

标签: mongodb meteor

我正在尝试动态订阅按日期过滤它们的集合。

我的服务器代码如下所示



Meteor.publish('caja', function(skip, desde, hasta) {
  if (desde && hasta === 'NA') {
    return Cajas.find({}, {
      skip: skip,
      limit: 25,
      sort: {
        fecha: 1
      }
    });
  } else if (hasta === 'NA') {
    return Cajas.find({
      fecha: {
        $gte: new Date(desde)
      }
    }, {
      skip: skip,
      limit: 25,
      sort: {
        fecha: 1
      }
    });
  } else {
    return Cajas.find({
      fecha: {
        $gte: new Date(desde),
        $lte: new Date(hasta)
      }
    }, {
      skip: skip,
      limit: 25,
      sort: {
        fecha: 1
      }
    });
  }
});




我的客户端代码如下所示



var desdeVar, hastaVar, skipVar;
skipVar = new ReactiveVar(0);
desdeVar = new ReactiveVar('NA');
hastaVar = new ReactiveVar('NA');

Template.caja.onCreated(function() {
  var self;
  self = this;
  return self.autorun(function() {
    var desde, hasta, skip;
    skip = skipVar.get();
    desde = desdeVar.get();
    hasta = hastaVar.get();
    return self.subscribe('caja', skip, desde, hasta);
  });
});

Template.caja.events({
  'change #hasta': function(e, t) {
    var hasta;
    hasta = new Date($('#hasta').val());
    return hastaVar.set(hasta);
  },
  'change #desde': function(e, t) {
    var desde;
    desde = new Date($('#desde').val());
    desdeVar.set(desde);
    return console.log(desdeVar.get());
  }
});




因此,当我更改日期时,我想动态订阅客户端中建立的日期范围。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

可能希望在属性值更改时检查您的模板是否重新运行(例如您的日期值)。如果您更改的html输入值未被跟踪,并且不会强制重新运行模板/查询(除非您将字段值保存在模板帮助函数的反应变量等中),您需要捕获事件并使模板无效以强制重新渲染。请参阅下文,您可以在其中设置deps.changed()来触发;

how to make a meteor template helper re-run/render after another template has rendered?

答案 1 :(得分:0)

在检查了我犯下的两个愚蠢错误后,我解决了这个问题。

[{name:'Bob',city:'Barcelona',trips: 1 },
{name:'Bruce',city:'Barcelona',trips: 5 },
{name:'Bruno',city:'València',trips: 2 },
{name:'Bart',city:'Barcelona',trips: 3 }]

db.x.aggregate([{$group:{city:'Barcelona', $avg:"$trips"}}]);

其中desde和hasta必须单独相等tu'NA',

其次我只使用服务器中的新Date()而不是客户端和服务器。

抱歉给您带来不便