【发布时间】:2013-05-04 05:44:13
【问题描述】:
当使用带有 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 实例化此单元格时,我希望根据传递给 render 函数的值更改 signSpan 的类名。我的 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。这是有道理的,因为我没有像调用 UiBinder 那样调用 createandbindui 函数。 renderer.getSignSpan 看起来很有希望,但我不知道要传递给父母什么。
我能找到的所有示例都使用event 来识别父级。但我不想点击生成的单元格。
有没有办法在 render 方法中改变样式?
【问题讨论】: