使用UiRenderer更改GWT Cell的span元素样式 [英] Change span element style for GWT Cell using UiRenderer
问题描述
在GWT 2.5中使用UiRenderer时,如何更改Span HTML元素的样式?
我已经设置了一个简单的Cell在CellTable中使用。 ui.xml如下所示:
<!DOCTYPE ui:UiBinder SYSTEMhttp://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;
接口MyUiRenderer扩展了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
看起来很有前途,但我不知道要为父项传递什么。
我可以找到的所有示例都使用事件
来标识父级。但我不想单击生成的单元格。
有没有一种方法可以改变渲染方法中的样式?
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());
}
How do I change the style for a Span HTML element when using UiRenderer with GWT 2.5? I have setup a simple cell to be used in a CellTable. The ui.xml looks like this :
<!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>
Now when this cell is instantiated by the CellTable, I expect to change the class name of the signSpan
to be changed based on the value passed into the render
function. My java code looks something like this:
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());
}
If I try to use the UiField directly it is set to Null. That makes sense because I am not calling the createandbindui
function like I would for UiBinder. The renderer.getSignSpan
looks promising but I dont know what to pass for parent.
All the example I could find use a event
to identify the parent. But I dont want to click the cell generated.
Is there a way of changing style in the render method?
Because the class
of the element is not a constant, you'll want to pass it as an argument to the render
method so the cell's render
reads:
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());
}
这篇关于使用UiRenderer更改GWT Cell的span元素样式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!