0

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

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 使用基本单元类....但没有成功。

提前致谢

4

1 回答 1

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 正常工作吗?

于 2013-06-19T07:06:15.250 回答