Пользовательский фильтр даты в коллекции реактивных таблиц

1

У меня есть реактивная таблица с настраиваемым фильтром, определенным в столбце даты

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>
  • 0
    Можете ли вы добавить часть кода, которая обращается к реактивной переменной с помощью .get?
  • 0
    @Jankapunkt Отредактировал мой вопрос соответственно
Теги:
filter
meteor
reactive

1 ответ

0
Лучший ответ

Все еще не совсем понятно, но я опубликовал всю коллекцию на сервере, а затем работал с некоторыми изменениями -

'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().

Кроме того, как подтвердил автор плагин-логических операторов (и/или), не работают в пользовательских фильтрах

Ещё вопросы

Сообщество Overcoder
Наверх
Меню