Добавление имен классов CSS к содержимому ячеек в gwt CellTable
Я хочу добавить классы стилей к элементам в ячейке (или к самому td), которые будут меняться в зависимости от состояния данных в ячейке. Например, ячейка может иметь цвет: красный, если данные не сохранены, цвет: синий при сохранении данных и цвет: черный после успешного завершения сохранения. Код, внешний по отношению к Cell
потребуется доступ для изменения имен классов, после того, как сработают обратные вызовы и т. д.
Я добился чего-то подобного с помощью взлома в моем Cell
что получает Element
из onBrowserEvent и добавляет туда атрибуты. Я могу установить начальный стиль в render
а затем измените его по мере необходимости в onBrowserEvent
и даже отслеживать этот элемент, чтобы его мог использовать внешний код. Это неполно, потому что я не могу получить элемент, пока не вызывается onBrowserEvent, и досадно, что мне приходится устанавливать стиль в двух разных местах.
Какой лучший способ добиться этого эффекта без повторного рендеринга всей таблицы при изменении состояния ячейки?
2 ответа
Неутешительный ответ здесь заключается в том, что у вас не может быть лучшего из обоих миров - статического рендеринга "все за один раз" и динамического обновления с изменением одного элемента. Единственный способ изменить стиль отдельной ячейки в пределах методов, предоставленных CellTable
и др. - перерисовать всю таблицу.
В своем собственном коде я как бы формализовал хаки, которые я делал, чтобы обновлять отдельные ячейки одновременно, устанавливая идентификатор DOM для div
отображается в каждой ячейке таблицы. Тогда я могу использовать getElementById
и продолжить оттуда. Я все еще избегаю накладных расходов на полный виджет. Это немного неуклюже, но скрыто за красивым интерфейсом, это не так уж плохо.
Я нашел что-то вроде
table.setRowStyles(new RowStyles() {
@Override
public String getStyleNames(Contact row, int rowIndex) {
if (row.name.startsWith("J")) {
return "bold";
}
return null;
}
});
который должен работать в GWT 2.4, чтобы решить вашу проблему.