0

CellListアイテムに、以下を使用して個別にスタイルを設定しています。

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

これは、アプリケーションを実行したときに反映されます。しかし、任意の行アイテムをクリックすると、すべてのアイテムがこれらのスタイルを失い、CellListの標準スタイル(CellListResources cssファイルで定義されている)に戻ります。この動作を停止するにはどうすればよいですか?

ListDataProviderを介してCellListにアイテムを追加しています。MultiSelectionModelのサブクラスを使用して選択を処理し、独自のCellListResourcesをCellListコンストラクターに渡して基本スタイルを定義しました。

4

1 に答える 1

0

これは、選択によって行が再レンダリングされるために発生します。したがって、この要素に加えた変更はすべて失われます。

このために私が見つけた回避策は、個々のセルレベルでそれを処理することです。

実際には、各セルを「StyleAwareCellDecorator」にラップして、特定のスタイルでスパンを作成します。次に、いくつかのロジックに基づいて、適用するスタイルを決定します。あなたの場合、それはcontext.getIndex()に基づいている可能性があります。

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 );

そしてそれを地図に保存するとしましょう

于 2013-03-27T19:55:59.030 に答える