2016-11-01 2 views
1

У меня есть следующий виджет, который использует GXT HtmlLayoutContainer:Как удалить элементы из 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> 

Как можно удалить отдельные myData элементы списка из пользовательского интерфейса после создания шаблона?

ответ

1

Вы можете выполнять итерацию над дочерними элементами контейнера, проверить, содержит ли атрибут class «my-data-» + 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); 
     } 
    } 
    } 
} 

Надежда, что помогает.

+0

Я попробовал container.select ("my-data-" + deletedData.getUniqueId()), removeChildren(), а затем removeFromParent(), но он не удалял всех детей, покидающих внутренние div. Я считаю, что есть ошибка в XTemplates GXT. Вместо этого я переключился на использование FlowContainer. – Cengiz

+0

можете ли вы пройти сгенерированный HTML в свой вопрос? Метод removeChild должен работать, поскольку это метод GWT. –

+0

Я пробовал их все, в том числе рекурсивно просматривая дочерние узлы DOM один за другим и удаляя их. Проблема в том, что, когда вы используете теги GQT , чтобы отображать список виджетов, виджеты отображаются, но не привязаны к их родителям. Очень странно, но я не могу найти другого способа объяснить это. К сожалению, у меня нет больше времени потратить на это; Я уже потратил впустую ~ 6-7 часов по этому вопросу :( – Cengiz

Смежные вопросы