动态订阅日期范围流星
问题描述:
我试图动态订阅按日期过滤它们的集合。动态订阅日期范围流星
我的服务器代码看起来像这样
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());
}
});
所以,当我CH ange我想动态订阅客户端中建立的日期范围的日期。
我错过了什么?
答
当属性值发生变化(例如您的日期值)时,您可能想检查您的模板是否正在重新运行。如果您更改了未被跟踪的HTML输入值,并且不会强制您的模板/查询重新运行(除非您将字段值保存在模板帮助函数的反应变量等中),则需要捕捉事件并使模板无效以强制重新渲染。看下面你可以在哪里设置deps.changed()来触发;
how to make a meteor template helper re-run/render after another template has rendered?
答
我检查2个愚蠢的错误,我表现的后解决了这个问题。
Meteor.publish('caja', function(skip, desde, hasta) {
if (desde == 'NA' & 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
}
});
}
});
凡desde和闪现了必须另外等于TU“NA”,
其次,我在服务器上,而不是在客户端和服务器只使用新的Date() 。
不便之处
只是好奇!您可以通过简单的{{#each}}来检查您是否在UI上获取订阅数据。如果您没有收到任何数据,则问题在于“onCreated()”中的描述。 –
我是,实际上下面有一个表引发订阅的数据,但是当我尝试按日期过滤时,数据仍然保持不变。 – Orozcorp