我有以下使用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
列表项?
答案 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);
}
}
}
}
希望有所帮助。