2013-02-28 2 views
0

У меня есть CellList в GWT 2.5. Каждый элемент ячейки - это класс, основанный на AbstractCell и определенный в файле UiBinder.Как я могу создать элементы CellList по отдельности?

Как установить различные стили для каждого элемента? Я бы хотел, чтобы некоторые из них появлялись в стиле «отключен», а другие - в «активном» стиле.

Это содержимое моего файла .ui.xml. Я не включил определения стиля или леса UiBinder.

<div class="{style.contact}"> 
    <div> 
     <div> 
      <img class="{style.photo}" src="{photo}"/> 
     </div> 
     <div class="{style.names}"> 
      <div> 
       <p><ui:text from="{name}"/></p> 
       <p><ui:text from="{jobTitle}"/></p> 
       <p><ui:text from="{company}"/></p> 
      </div> 
     </div> 
    </div> 
</div> 

ответ

1

Использование CellList.getRowElement(): ответ

cellList.getRowElement(3).addClassName("css-disabled"); 
cellList.getRowElement(4).addClassName("css-active"); 
+0

После попытки предлагаемого подхода и поиска его не работает, похоже, что у GWT CellList есть свой собственный API для обработки изменений стиля. – Carl

+0

@ Carl try put важный! В стиле. – texasbruce

+0

Я пробовал! Важно, но эффекта не было. «addClassName()» отключается от отображаемого html. Когда я смотрю с помощью панели инструментов разработчика, я даже не могу найти элемент с именем класса «css-disabled». – Carl

1

Вы можете достичь добавления имен стилей путем переопределения метода визуализации() вашей клетки следующим образом -

@Override 
public void render(com.google.gwt.cell.client.Cell.Context context, T value, SafeHtmlBuilder sb) 
{ 
    if(disable condition met) 
    { 
      // Apply disabled style 
     sb.appendHtmlConstant("<div class='css-style-disabled' >"+ value+" </div>" 
    } 
    else 
    { 
      super.render(context, value, sb); 
    } 
} 

Итак, добавьте css-style-disabled класса в файл CSS начать стилизации его.

+0

Мне нравится идея размещения логики в render(), но в этом случае мне нужно расширить мой DTO, чтобы включить отключенное состояние, которое я бы предпочел избежать, поскольку это обычный класс в моем приложении. – Carl

+0

С тех пор я использовал UiBinder для определения пользовательского интерфейса, поэтому этот ответ больше не применим к такому подходу. – Carl

0

texasbruce является решением, но если вы используете ListDataProvider, то вам необходимо изменить сроки любого вызова addClassName() таким образом:

new Timer() { 
    @Override 
    public void run() { 
     << call cellList.getRowElement(0).addClassName("css-disabled") here >>; 
    } 
}.schedule(1);