我希望在同一树级和同一子列表中有多个单元格类型 这是我想要创建的结构
A (Foo)
- AA (Bar)
- AB (Baz)
- AA (Baz)
这篇文章说无法创建上述结构。 https://groups.google.com/forum/?fromgroups#!topic/google-web-toolkit/xUEf50-r2Lo
以下是我们感兴趣的部分:
支持以下内容。 A和B的孩子是不同的 类型(Bar和Baz),但都是一个深度:
A (Foo) - AA (Bar) - AB (Bar) - AA (Bar) B (Foo) - BA (Baz) - BB (Baz) - BC (Baz)
不支持以下内容。 A的孩子不能 多种类型。
A (Foo) - AA (Bar) - AB (Baz) - AA (Biz)
如果我们能够实现它,一些想法或样本会很棒。
我尝试使用Bar和Baz的基本单元类....但这不成功。
提前致谢
答案 0 :(得分:1)
最后,我创建了一个自定义单元格,其中包含2个不同的UIRenderer。根据DTO的标志,我们可以决定使用哪个渲染器。每个单元格类型都在xml中定义。
public class DualFaceCell extends AbstractCell<DTO> {
@UiTemplate("SimpleFaceCell.ui.xml")
interface SimpleFaceRenderer extends UiRenderer {
void render(SafeHtmlBuilder sb);
void onBrowserEvent(SimpleFaceCell o, NativeEvent e, Element p);
}
@UiTemplate("ComplexFaceCell.ui.xml")
interface ComplexFaceRenderer extends UiRenderer {
void render(SafeHtmlBuilder sb, String name);
void onBrowserEvent(ComplexFaceCell o, NativeEvent e, Element p);
}
private final SimpleFaceRenderer simpleRenderer = GWT.create(SimpleFaceRenderer .class);
private final ComplexFaceRenderer complexRenderer = GWT.create(ComplexFaceRenderer .class);
public DualFaceCell() {
super(BrowserEvents.CLICK);
}
@Override
public void render(Context context, DTO value, SafeHtmlBuilder sb) {
if (value.isSimpleFaceCell()) {
simpleRenderer.render(sb);
} else {
complexRenderer.render(sb, value.getName());
}
}
不幸的是,UIHandler不再可用了。即使我已经在xml和ui:field =“add”中声明了,如果我们想要使用注释来处理它的动作:
@UiHandler({ "add" })
void onAddClicked(ClickEvent event, Element parent) {
Window.alert("Add clicked");
}
显示以下错误:
"add" is not a known field name as listed in the @UiHandler annotation in "void onAddListClicked(com.google.gwt.event.dom.client.ClickEvent event, com.google.gwt.dom.client.Element parent)" of com.bla.bla.client.view.DualFaceCell