Какой будет хороший способ фильтрации GWT CellList с использованием нескольких CheckBox?
Работая в Google Web Toolkit (GWT), я использую CellList для отображения деталей списка Тарифов (используя CompositeCell, чтобы показать CheckBoxCell рядом с моей собственной ячейкой).
Я хочу отфильтровать список по продолжительности тарифа (12, 18, 24, 36 месяцев и т. Д.). Я хотел бы сделать флажок для каждой длины тарифа в верхней части списка и обновлять dataProvider по мере необходимости, когда пользователи снимают флажок и перепроверяют флажок.
Я заранее не знаю набор длин тарифов, они будут извлечены из набора результатов при визуализации страницы. Может быть только два (требуются два флажка), но, возможно, их может быть 10 (требуется 10 флажков) - я хочу отображать флажок только для каждого по мере необходимости.
Так или иначе, мне нужно связать значение int с каждым флажком, а затем передать это int в функцию, которая обновляет список, удаляя все соответствующие тарифы. Я просто не уверен, как добавить обработчик для флажков и как получить значение для этого конкретного окна.
Вот о чем я думаю:
// panel to hold boxes
private Panel contractLengthPanel = new HorizontalPanel();
textPanel2.add(contractLengthPanel);
// create a set of the terms, by looping the result set
Set<String> contractTerms = new HashSet<String>();
for(ElecTariff tariff : tariffs)
{
contractTerms.add(Integer.toString(tariff.getContractLength()));
}
// loop that set, creating a CheckBox for each value
for(String term : contractTerms)
{
CheckBox box = new CheckBox(term + " Months");
// set all boxes with the same name, and a unique id
box.getElement().setAttribute("name", "termBoxes");
box.getElement().setAttribute("id", "termBox" + term);
contractLengthPanel.add(box);
}
Теперь я не уверен, что я нахожусь в правильном направлении, но теперь у меня есть каждый блок как часть одной и той же группы (у них одно и то же имя), я хотел бы использовать это для добавления обработчика, который вызывается, когда флажок установлен или не установлен, передавая идентификатор блока (который содержит длину тарифа) этой функции.
Надеюсь, это не слишком запутанно написано. Помощь приветствуется.
1 ответ
В HTML нет ничего похожего на "группу флажков", и в GWT их нет. Хотя есть и "группы радиокнопок", но речь идет только о том, чтобы их проверенное состояние было взаимоисключающим, это ничего не меняет в способе работы с ними из кода.
Вы должны слушать изменения на каждом флажке.
Однако вы можете использовать один и тот же обработчик событий для всех ваших флажков; что-то вроде:
ValueChangeHandler<Boolean> handler = new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> event) {
CheckBox box = (CheckBox) event.getSource();
String id = box.getFormValue();
boolean checked = box.getValue();
…
}
};
(примечание: я использовал getFormValue()
скорее, чем getElement().getId()
; Я считаю, что это лучший выбор: он специально сделан, чтобы связать значение с флажком)