У меня есть реактивная таблица с настраиваемым фильтром, определенным в столбце даты
Template.displayoptions.created = function () {
this.timeFilter = new ReactiveTable.Filter('time-filter', ['deadline']);
};
Template.displayoptions.events({
'click .form-check-input'(event,template) {
var timefilter = template.find('#timefilter:checked').value;
var today = new Date();
var thisweek = new Date(moment(today).add(7, 'days'));
var thismonth = new Date(moment(today).add(1, 'month'));
switch(timefilter){
case "today":
template.timeFilter.set({"$gte": today});
break;
case "thisweek":
template.timeFilter.set({"$and":[{"$gte": today}, {"$lt" : thisweek}]});
break;
case "thismonth":
template.timeFilter.set({"$and":[{"$gte": today}, {"$lt" : thismonth}]});
break;
}
}
});
Когда событие запускается (переключатель для выбора сегодня/неделя/месяц), таблица мигает, но данные остаются неизменными.
Что может быть пропало?
rowsPerPage: 5,
filters: ['time-filter'],
showNavigationRowsPerPage: false,
showFilter: false,
filter.get (я не уверен, что это требуется)
Template.displayoptions.helpers({
checked: function () {
var istimeFilter = _.isObject(Template.instance().timeFilter.get());
if (istimeFilter) {
return "checked";
}
return "";
}
});
Радио-кнопки
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" id="timefilter" name="timefilter" value="today" {{checked}}>
<label class="form-check-label" for="timefilter">Today</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" id="timefilter" name="timefilter" value="thisweek" {{checked}}>
<label class="form-check-label" for="timefilter">This Week</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" id="timefilter" name="timefilter" value="thismonth" {{checked}}>
<label class="form-check-label" for="timefilter">This Month</label>
</div>
Все еще не совсем понятно, но я опубликовал всю коллекцию на сервере, а затем работал с некоторыми изменениями -
'change #timefilter'(event,template) {
template.timeFilter.set("");
var timefilter = template.find('#timefilter:checked').value;
var startOfDay = moment().startOf('day').toDate();
var endOfDay = moment().endOf('day').toDate();
var startOfWeek = moment().startOf('week').toDate();
var endOfWeek = moment().endOf('week').toDate();
var startOfMonth = moment().startOf('month').toDate();
var endOfMonth = moment().endOf('month').toDate();
switch(timefilter){
case "today":
template.timeFilter.set({"$gte": startOfDay, "$lt": endOfDay});
break;
case "thisweek":
template.timeFilter.set({"$gte": startOfWeek, "$lt" : endOfWeek});
break;
case "thismonth":
template.timeFilter.set({"$gte": startOfMonth, "$lt" : endOfMonth});
break;
default:
break;
}
Мне вообще не нужно было использовать filter.get().
Кроме того, как подтвердил автор плагин-логических операторов (и/или), не работают в пользовательских фильтрах