2

GWT 2.5 で UiRenderer を使用する場合、Span HTML 要素のスタイルを変更するにはどうすればよいですか? CellTable で使用する単純なセルをセットアップしました。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='stkval' type='java.lang.String'/>
<ui:with field='stkchg' type='java.lang.String'/>
<ui:with field='res' type='com.mycompanyclient.client.Enres'/>

<div id="parent">
    <span><ui:text from='{stkval}'/></span>.
    [<span class="{res.newstyle.positive}" ui:field="signSpan">
        <ui:text from='{stkchg}'/>
    </span>]
</div>
</ui:UiBinder>

このセルが CellTable によってインスタンス化されると、関数signSpanに渡された値に基づいて変更されるクラス名が変更されることを期待していrenderます。私のJavaコードは次のようになります。

public class IndCell extends AbstractCell<QuoteProxy>  {

@UiField
SpanElement signSpan;
@UiField(provided=true)
Enres res = Enres.INSTANCE;

interface MyUiRenderer extends UiRenderer {
    SpanElement getSignSpan(Element parent);
    void render(SafeHtmlBuilder sb, String stkval,String stkchg);
}
private static MyUiRenderer renderer = GWT.create(MyUiRenderer.class);

public IndCell() {
    res.newstyle().ensureInjected();
}


@Override
public void render(com.google.gwt.cell.client.Cell.Context context,
        QuoteProxy value, SafeHtmlBuilder sb) {
            if (value.getChangeSign().contentequals('d')) {
    renderer.getSignSpan(/* ?? */).removeClassName(res.newstyle().negative());
            renderer.getSignSpan(/* ?? */).addClassName(res.newstyle().positive());
            }
    renderer.render(sb, value.getAmount(),value.getChange());
}

UiField を直接使用しようとすると、Null に設定されます。createandbinduiUiBinder の場合のように関数を呼び出していないため、これは理にかなっています。有望にrenderer.getSignSpan見えますが、親に何を渡すべきかわかりません。私が見つけたすべての例は、 a を使用eventして親を識別しています。しかし、生成されたセルをクリックしたくありません。

render メソッドでスタイルを変更する方法はありますか?

4

2 に答える 2

1

要素の は定数ではないため、classそれを引数としてメソッドに渡しrender、セルが次のようになるようにしrenderます。

public void render(Cell.Context context, QuoteProxy value, SafeHtmlBuilder sb) {
  renderer.render(sb, value.getAmount(), value.getChange(),
      value.getChangeSign().contentequals('d') ? res.newstyle.positive() : res.newstyle.negative());
}
于 2013-05-04T09:18:03.427 に答える