2013-02-28 47 views
0

我在GWT 2.5中有一个CellList。每个单元格项都是基于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 2013-03-19 16:07:56

+0

@Carl试试把重要!在风格。 – texasbruce 2013-03-19 16:11:15

+0

我试过了!重要但没有效果。 “addClassName()”与正在呈现的html断开连接。当我看起来使用开发工具栏时,我甚至找不到任何类名为“css-disabled”的元素。 – Carl 2013-03-20 17:05:29

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 2013-03-02 05:21:16

+0

我从此采用UiBinder来定义UI,因此这个答案不再适用于这种方法。 – Carl 2013-03-19 10:29:03

0

texasbruce的回答是解决方案,但如果你使用的是ListDataProvider那么你就需要这样修改,以addClassName(任何呼叫的时间):

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