GWT - 如何在同一级别和同一子级列表中拥有多个单元格类型?

时间:2013-06-18 14:51:50

标签: gwt

我希望在同一树级和同一子列表中有多个单元格类型 这是我想要创建的结构

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)

上一篇文章是从2010年开始的,我想知道现在这个结构是否仍然不受支持?


如果我们能够实现它,一些想法或样本会很棒。 我尝试使用Bar和Baz的基本单元类....但这不成功。

提前致谢

1 个答案:

答案 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 

你知道如何欺骗UIHandler正常工作吗?