我创建使用UiBinder的和UiRenderer一个抽象的细胞。 我的数据源是一个列表的列表。 可以说,汽车的列表,每个车都有的车型名单。 我加入细胞的CellList。 每个细胞就像是喜欢用向前和向后按钮,在顶部的卡(IM使用箭头图像和处理使用uihandler点击事件)和卡显示模型的属性。 在点击向前和向后的图像显示下分别与以前的型号。 我不是能够改变被点击图像时,模型名称(和其他的div)。
<ui:with field="model_name" type="java.lang.String" />
<ui:with field="leftArrow" type="com.google.gwt.safehtml.shared.SafeHtml" />
<ui:with field="rightArrow" type="com.google.gwt.safehtml.shared.SafeHtml" />
<div>
<table width="100%" border="1" cellpadding="2" cellspacing="2"
bgcolor="#ffffff">
<tr valign="top">
<td>
<div ui:field="left" >
<ui:safehtml from='{leftArrow}' />
</div>
</td>
<td>
<div ui:field="model"><ui:text from="{model_name}" /></div>
</td>
<td>
<div ui:field="right" >
<ui:safehtml from='{rightArrow}' />
</div>
</td>
</tr>
</table>
</div>
林不知道如何访问模型格中的文本。 随后有更多的div其价值被点击图像时/文本变化。
public class NewCompCell extends AbstractCell<String> {
@UiField
String model_name;
@UiField
DivElement model;
static interface Images extends ClientBundle {
@Source("LeftArrow.png")
ImageResource LeftArrow();
@Source("rightArrow.png")
ImageResource rightArrow();
}
private Images images = GWT.create(Images.class);
private Renderer uiRenderer = GWT.create(Renderer.class);
public static interface Renderer extends UiRenderer {
void render(SafeHtmlBuilder sb, String value, String model_name,
SafeHtml leftArrow, SafeHtml rightArrow);
void onBrowserEvent(NewCompCell o, NativeEvent e, Element p, String n);
}
public NewCompCell() {
super(BrowserEvents.CLICK);
}
@Override
public void onBrowserEvent(Context context, Element parent, String value,
NativeEvent event,
ValueUpdater<String> valueUpdater) {
uiRenderer.onBrowserEvent(this, event, parent, value);
}
@Override
public void render(com.google.gwt.cell.client.Cell.Context context,
String value, SafeHtmlBuilder sb) {
uiRenderer
.render(sb, value, value,
AbstractImagePrototype.create(images.LeftArrow())
.getSafeHtml(),
AbstractImagePrototype.create(images.rightArrow())
.getSafeHtml());
}
@UiHandler({ "right" })
void onRightArrowClicked(ClickEvent event, Element parent, String string) {
model.setInnerText("next model");
}
@UiHandler({ "left" })
void onLeftArrowClicked(ClickEvent event, Element parent, String string) {
model.setInnerText("previous model");
}
}
当我点击图片即时得到下面的错误。
com.google.gwt.core.client.JavaScriptException:(类型错误)@ com.google.gwt.core.client.impl.Impl ::申请(Ljava /郎/对象; Ljava /郎/对象; Ljava /郎/对象)([JavaScript对象(36),JavaScript对象(2),JavaScript对象(204)]):不能将空的属性 '的textContent' 在com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java :249)在com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)在com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:576)在com.google。 gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:284)在com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)在com.google.gwt.core.client.impl。 Impl.apply在sun.reflect.DelegatingMethodAccessorImpl(Impl.java)在com.google.gwt.core.client.impl.Impl.entry0(Impl.java:356)在sun.reflect.GeneratedMethodAccessor52.invoke(来源不明)。调用(未知来源)在java.lang.reflect.Method.invoke(未知来源)中C om.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)在com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)在com.google.gwt.dev。 shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)在com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)在com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer。 Java的:547)在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)在java.lang.Thread.run(来源不明)