Добавление имен классов CSS к содержимому ячеек в gwt CellTable - PullRequest
1 голос
/ 25 апреля 2011

Я хочу добавить классы стилей к элементам в ячейке (или к самому td), которые будут меняться в зависимости от состояния данных в ячейке.Например, ячейка может иметь цвет: красный, если данные не сохранены, цвет: синий при сохранении данных и цвет: черный после успешного завершения сохранения.Код, внешний по отношению к Cell, будет нуждаться в доступе для изменения имен классов, после запуска обратных вызовов и т. Д.

Я добился чего-то подобного с помощью хака в моем Cell, который получает ElementonBrowserEvent и добавляет туда атрибуты.Я могу установить начальный стиль в render, а затем изменить его по необходимости в onBrowserEvent и даже отслеживать этот элемент, чтобы его мог использовать внешний код.Это неполно, потому что я не могу получить элемент, пока не вызывается onBrowserEvent, и досадно, что мне приходится устанавливать стиль в двух разных местах.

Какой лучший способ добиться этого эффекта без повторного рендерингався таблица, когда состояние ячейки изменяется?

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Я нашел что-то вроде

table.setRowStyles(new RowStyles() {
@Override
public String getStyleNames(Contact row, int rowIndex) {
    if (row.name.startsWith("J")) {
        return "bold";
    } 

    return null;
}
});

, которое должно работать в GWT 2.4 для решения вашего вопроса.

0 голосов
/ 29 ноября 2011

Неутешительный ответ здесь заключается в том, что у вас не может быть лучшего из обоих миров - статического рендеринга "все за один раз" и динамического обновления с изменением одного элемента. Единственный способ изменить стиль отдельной ячейки в рамках методов, предоставляемых CellTable и др., - это перерисовать всю таблицу.

В своем собственном коде я как бы формализовал хаки, которые я сделал для обновления отдельных ячеек за один раз, установив идентификатор DOM для div, отображаемого для каждой ячейки таблицы. Тогда я могу использовать getElementById и продолжить оттуда. Я все еще избегаю накладных расходов на полный виджет. Это немного неуклюже, но скрыто за красивым интерфейсом, это не так уж плохо.

...