2013-04-17 3 views
0

В приложении Wicket у меня есть DefaultDataTable с расширением SortableDataProvider и кликабельный столбец (расширение AbstractColumn).Калибровка фильтра данных после изменения поля ввода

В поле данных есть поле поиска и кнопка, поэтому пользователь может фильтровать таблицу (сравнение слова поиска и содержимого таблицы).

Однако, я бы предпочел другой подход. Было бы лучше, если бы пользователю не нужно было нажимать на кнопку, чтобы соответствовать результатам, но таблица обновлялась после того, как каждый символ вставлен или удален в поле поиска или в поле поиска (немедленная фильтрация, а не после нажатия на кнопку). Кроме того, части записей, которые соответствуют поисковому слову, должны быть подчеркнуты или получать другой цвет шрифта.

Я знаю, что что-то подобное возможно с Javascript, но я не знаю, как прикрепить Javascript к datatable. Как я могу это сделать? Или есть лучший/альтернативный способ добиться того, чего я хочу?

Любая помощь была бы действительно оценена!

+0

Если вы хотите что-то сделать с отображаемыми значениями в DataTable, вам нужно будет переопределить метод 'newCellItem()'. –

ответ

3

Вы можете использовать AjaxFormComponentUpdatingBehavior, чтобы добавить ajax-поведение для формирования компонентов. Ajax называется зависимым от события js, указанного в конструкторе, в данном случае «onkeyup». Затем вы нацеливаете компонент на то, что ajax для повторной обработки, для калитки 4, 5 target.addComponent(datatable); для калитки 6x target.add(datatable);. Но учтите, что datatable устанавливает свой OutputMarkupId true target.addComponent(datatable);, это необходимо для того, чтобы любой компонент был нацелен калибровочным ajax.

datatable.setOutputMarkupId(true); 

field.add(new AjaxFormComponentUpdatingBehavior("onkeyup") { 
    @Override 
    protected void onUpdate(AjaxRequestTarget target) { 
      target.addComponent(datatable); 
    } 
}); 

Возможно, вам также понадобится throttling, надеюсь, что это поможет!

+0

Обновление работает как шарм, большое спасибо. Теперь мне нужно только что-то изменить об отфильтрованных элементах. У вас есть идея, как это сделать? – Attiej

+1

вместо AjaxFormComponentUpdatingBehavior («onkeyup») я бы использовал «OnChangeAjaxBehavior», который охватывает также вставку с помощью мыши и так далее ... –

+0

@ Robert ooo не знал о 'OnChangeAjaxBehavior', который выглядит как лучший вариант. @Attiej, что вам нужно изменить в отфильтрованных элементах? – drobson

Смежные вопросы