Добавление имен классов 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, чтобы решить вашу проблему.

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