我正在尝试动态订阅按日期过滤它们的集合。
我的服务器代码如下所示
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());
}
});

因此,当我更改日期时,我想动态订阅客户端中建立的日期范围。
我错过了什么?
答案 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()而不是客户端和服务器。
抱歉给您带来不便