2011-04-24 1 views
1

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

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

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

ответ

0

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

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

1

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

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

Это хорошо для первоначального рендеринга - спасибо! –