Динамическое обновление содержимого виджетов GWT Composite - PullRequest
1 голос
/ 17 июня 2011

Я создал виджет, который является подклассом Composite и содержит com.extjs.gxt.ui.client.widget.Viewport.В этом окне просмотра я добавил свой компонент заголовка, LayoutComponent (изначально пустой) и мой компонент нижнего колонтитула.Я инициализировал составной виджет, вызвав initWidget в конце конструктора, который все настраивает ... что-то вроде этого (некоторый код удален для удобства чтения):

public class MyComposite extends Composite {
    ... 

    public MyComposite(...) {
        viewport = new Viewport();
        viewport.add(new Header());

        content = new LayoutContainer();
        viewport.add(content);

        viewport.add(new Footer());

        initWidget(viewport);
    }

    public void show(Widget... widgets) {
        content.removeAll();
        for (Widget widget: widgets) content.add(widget);
    }
}

Затем я добавляю экземпляр этого вRootPanel:

MyComposite myComposite = new MyComposite(...);
RootPanel.get("myComposite").add(myComposite);

И угадайте, что ... это работает!Я вижу это.Заголовок показывает, нижний колонтитул показывает, и содержание является пустым в этой точке.Хорошо.Затем я делаю звонок, чтобы показать и добавить вещи к нему.Не совсем так, как например:

myComposite.show(new Label(...));

Но ничего не происходит.Код работает, метод add (...) вызывается из метода show (...), исключений нет, но ничего (нового) не появляется.Я не использую метку, но это не проблема (проверено, это работает в другом месте).Когда я проверяю DOM в браузере, я вижу, что для содержимого есть div, как он был изначально, но он остался пустым (то есть без содержимого тела).

Чего мне не хватает?

Спасибо!

1 Ответ

4 голосов
/ 17 июня 2011

Прежде всего, вы расширяете GWT Composite или GXT Composite? Если это GXT-тип, вам нужно вызвать initComponent () в окне просмотра (а не initWidget), как описано здесь: http://dev.sencha.com/deploy/gxtdocs/com/extjs/gxt/ui/client/widget/Composite.html

Также попробуйте добавить следующую строку в конец вашего метода показа: content.layout (истина);

Это заставит GXT разметить содержимое вашего LayoutContainer, и вы должны как минимум увидеть новые элементы, добавленные в DOM. Если они по-прежнему не появляются на экране, вам нужно изменить макет вашего LayoutContainer.

...