Как использовать более одного типа gridfilter в ExtJS?

В настоящее время я работаю со значениями SQL Timestamp (дата + время) в своих столбцах на панели сетки. Чтобы правильно отфильтровать это, мне нужно меню даты и времени в заголовке столбца. Комбинации типов «дата» и «число» было бы достаточно.

Другими словами, мне нужно меню заголовка столбца, в котором есть меню фильтров дат и чисел. Как я могу применить два типа фильтров к меню заголовка столбца? Если это не работает напрямую, как создать собственный фильтр, сочетающий типы даты и числа?

Тип номера:

Как использовать более одного типа gridfilter в ExtJS?

Тип даты: Как использовать более одного типа gridfilter в ExtJS?

Обновлено: с помощью @abeyaz мне удалось создать собственный фильтр столбцов с полями чисел и дат. Хотя мне не удалось найти способ внести изменения в значения в полях, применяемых к удаленному фильтру магазина. Как мне настроить события, которые будут вызываться, когда пользователь нажимает ввод в числовом поле, например, для изменения массива фильтров магазина?

Как использовать более одного типа gridfilter в ExtJS?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
333
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет встроенного фильтра сетки даты и времени. Тем не менее, вы можете легко реализовать его самостоятельно. Во-первых, проверьте код фильтра даты. Вы должны создать класс Ext.grid.filters.menu.DateTime, расширяющий Ext.grid.filters.menu.Base, как в классе даты. Что вы можете сделать, так это; вместо использования datefield в items вы должны использовать контейнер поля, который включает datefield и timefield вместе. Следующий пример даст вам представление:

   menu: {
        items: {
            lt: {
                xtype: 'fieldcontainer',
                label: 'Before',
                placeholder: 'Before...',
                operator: '<',
                weight: 10,
                items: [
                    {
                        xtype: 'datefield', 
                        flex: 1,
                        listeners: {
                            change: 'up.onInputChange'
                        }
                    },
                    {
                        xtype: 'timefield', 
                        width: 80,
                        listeners: {
                            change: 'up.onInputChange'
                        }
                    }
                ]
            }
        }
    }

Однако вы также должны переопределить методы фильтрации, чтобы она работала правильно из-за разных элементов. Я создал скрипку для полностью рабочий пример

Этот пример очень полезен, но когда я пытаюсь реализовать этот контейнер полей в Ext.grid.filters.filter.String, например, я получаю много ошибок из-за отсутствия методов обработки событий. Есть ли способ переопределить только menu.items и сохранить все методы событий? Мне кажется, что это простая настройка...

Gabriel Robaina 10.06.2019 20:51

Я не понял, что вы имели в виду. Было бы лучше, если бы вы могли поделиться скрипкой.

abeyaz 10.06.2019 21:24

Я отредактировал вопрос с некоторыми из моих достижений. Я не смог заставить скрипку показать именно то, что мне нужно, поэтому я решил, что изображение того, как я включил это, было бы более полезным. В настоящее время я использую классический Ext 6.5.

Gabriel Robaina 12.06.2019 20:27

«up.onInputChange» — это то, что вы ищете. Посмотрите, как я его использовал. Вы должны использовать его аналогичным образом для других полей. Это вызывает обновление в магазине с новым фильтром

abeyaz 12.06.2019 22:04

«up.onInputChange» ищет метод с таким именем на моем контроллере. Это ожидаемое поведение? Должен ли я кодировать этот метод с нуля? Подобный метод должен помечать флажок в меню фильтра и обновлять фильтр магазина.

Gabriel Robaina 13.06.2019 13:09

Нет, именно так extjs сделали в фильтре даты, и я скопировал оттуда. Это метод в поле фильтра. Перепроверьте мою скрипку, чтобы увидеть, например. Вы можете активировать некоторые другие функции оттуда в соответствии с вашими потребностями. Однако в скрипке фильтр применяется при наборе текста, поэтому я не знаю вашего случая. Возможно, удаленный фильтр отличается. Опять же, лучший способ получить помощь — это всегда поделиться скрипкой, чтобы имитировать такое же/похожее поведение. Это не обязательно должен быть один и тот же код.

abeyaz 13.06.2019 14:17

Здорово! нет проблем

abeyaz 13.06.2019 15:48

Другие вопросы по теме