如何从GXT HtmlLayoutContainer中删除元素

时间:2016-11-01 10:16:30

标签: gwt gxt

我有以下使用GXT HtmlLayoutContainer的小部件:

public class MyWidget implements IsWidget {

    public interface MyWidgetLayout extends XTemplates {
        @XTemplate(source = "my/stuff/resources/MyWidget.html")
        SafeHtml getTemplate(List<MyData> myData);
    }

    public static final MyWidgetLayout LAYOUT = GWT.create(MyWidgetLayout .class);

    private final List<MyData> myData;

    private HtmlLayoutContainer container;

    public TaskRegulationsContainer(List<MyData> myData) {
        this.myData = myData;
    }

    @Override
    public Widget asWidget() {
        if (container == null) {
            container = new HtmlLayoutContainer(LAYOUT.getTemplate(regulations, postfix));

            if (null != regulations) {
                for (MyData d : myData) {
                    MyOtherWidget w = new MyOtherWidget(d);
                    container.add(w, new AbstractHtmlLayoutContainer.HtmlData(".my-data-" + myData.getUniqueId()));
                }
            }
        }

        return container;
    }

    public void handleRemovedData(MyData removedData) {
        // How can I remove the widget corresponding to removedData
        // with the selector my-data-{uniqueId}?
    }
}

使用以下模板:

<style>
</style>

<div>
    <span>My Data:</span>
    <div>
        <tpl for="myData">
            <div class="my-data-{uniqueId}"></div>
        </tpl>
    </div>
</div>

如何在呈现模板后从UI中删除单个myData列表项?

1 个答案:

答案 0 :(得分:1)

您可以迭代容器的子项,检查class属性是否包含&#34; my-data - &#34; + uniqueId并删除它。 这样的事情应该有效:

public void handleRemovedData(MyData removedData) {
  for (int i = 0; i < container.getChildCount(); i++) {
    node = pParent.getChild(i);
    if (node.getNodeType() == Node.ELEMENT_NODE) {
      Element element = (Element) node.cast();
      if (element.getClassName().contains("my-data-" + removedData.getUniqueId())) {
        container.removeChild(element);
      }
    }
  }
}

希望有所帮助。