0

GWT CellList があり、DataProvider を介してアイテムを追加した後、次のコードを使用して各アイテムにスタイリングを追加します。

members... we can styling if a matched item is also in members
matched... passed in as a MetaJsArray<Contact>

CellList<Contact> list = getView().getResults();
for (int i=0; i<matched.length(); i++) {
    if (members.isExistingEntry(matched.get(i))) {
        list.getRowElement(i).addClassName("RED");
    }
}

このコードは、リスト内のアイテムをクリックするまで機能します。

クリックされたアイテムごとに onCellPreview() が呼び出されますが、以前にクリックされたアイテムの「RED」スタイルは失われます。

別のスタイルを追加する必要がありますか? または、「RED」の損失を止めるにはどうすればよいですか?

4

2 に答える 2

0

さまざまなアプローチを試した後、ハックなしで機能する唯一の方法は、レンダリングの時点でスタイルを定義することです。

AbstractCell を拡張する独自の ContactCell を使用すると、render() 関数はスタイル設定値を contactcell.ui.xml ファイルに渡すことができます。

@Override
public void render(Context context, Contact value, SafeHtmlBuilder sb) {
    if (value == null) {
        return;
    }

    String styling = value.getStyling();
    uiRenderer.render(sb, styling);
}

そして contactcell.ui.xml ファイルで

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'>
    <ui:with field='styling' type='java.lang.String'/>

    <div class="{styling}"> ... </div>

GWT はスタイル名をマングルするため、独自の CssResource クラスを定義してクラス名にアクセスし、アプリ全体でクラス名がマングルされるようにします。

于 2013-05-01T15:42:42.103 に答える