如何阻止我的GWT Cell List项目丢失CSS样式?

时间:2013-03-26 11:38:02

标签: gwt styles celllist

我正在使用以下方式在CellList项目上设置样式:

cellList.getRowElement(0).addClassName("style-name-A");
cellList.getRowElement(1).addClassName("style-name-B");

这在我运行应用程序时反映出来。但是当我单击任何行项时,所有项都会丢失这些样式并恢复为CellList的标准样式(在我的CellListResources css文件中定义)。我怎么能阻止这种行为?

我通过ListDataProvider将项添加到CellList;使用MultiSelectionModel的子类来处理选择,并将我自己的CellListResources传递给CellList构造函数以定义基本样式。

1 个答案:

答案 0 :(得分:0)

这是因为选择会重新呈现该行,因此会丢失您对此元素所做的任何更改。

我发现的解决方法是在单个单元级别处理它。

在实践中,我将每个单元格包装成一个“StyleAwareCellDecorator”,它创建了一个给定样式的跨度。 然后,我根据某些逻辑决定应用哪种样式。它可以基于你的case.dexIndex()。

public class StyleAwareCellDecorator<C> extends AbtractCell<C> {

    private final Cell<C> decorated;
    private final MyLogic logic;

    public StyleAwareCellDecorator( Cell<C> decorated, MyLogic logic ) {
        this.decorated = decorated;
        this.logic = logic;
    }

    void render(Context context, C value, SafeHtmlBuilder sb) {
        String theCssClass = myLogic.decideWhatStyleToUse( context.getIndex() );
        sb.append( ... some tag with class="theCssClass" ... );
        delegated.render( context, value, sb );
        sb.append( ... close tag ... );
    }
}

使用此工具,您可以使用以下代码替换代码:

MyLogic myCellStyleLogic;
myCellStyleLogic.useStyleForRowIndex( "style-name-A", 0 );
myCellStyleLogic.useStyleForRowIndex( "style-name-B", 1 );

然后说在地图中存储