GWT Activity: как использовать активность, место, шину событий и uibinder

Я новичок в GWT, и мне интересно, как использовать Activity, Place, EventBus и UIbinder. Макет моего приложения выглядит примерно так:

Виджет 1:

<g:DockLayoutPanel ui:field="myPanel" unit='PX'>
    <g:north size='60'>
        <m:HeaderPanelImpl styleName='{res.style.panelBorder}' ui:field='headerPanel' />
    </g:north>
    <g:south size='60'>
        <g:HTMLPanel styleName='{res.style.panelBorder}' ui:field='footerPanel' />
    </g:south>
    <g:center>
        <g:SimpleLayoutPanel styleName='{res.style.panelBorder}' ui:field='centerPanel' />
    </g:center>
</g:DockLayoutPanel>

Здесь в «widget1.headerPanel» есть навигация, которая определяет, какой виджет будет отображаться в «widget1.centerPanel». Виджеты, которые должны отображаться в «widget1.centerPanel», это «widget2.0» и «widget2.1».

Виджет2.0

<g:DockLayoutPanel unit='PX'>
    <g:north size='100'>
        <g:HTMLPanel styleName='{res.style.panelBorder}'>
            <g:Label>TopPanel</g:Label>
        </g:HTMLPanel>
    </g:north>
    <g:west size='200'>
        <g:HTMLPanel styleName='{res.style.panelBorder}'>
            <g:Label>LeftPanel</g:Label>
        </g:HTMLPanel>
    </g:west>
    <g:east size='200'>
        <g:HTMLPanel styleName='{res.style.panelBorder}'>
            <g:Label>RightPanel</g:Label>
        </g:HTMLPanel>
    </g:east>
    <g:center>
        <g:SimpleLayoutPanel styleName='{res.style.panelBorder}' ui:field='centerPanel' />
    </g:center>
</g:DockLayoutPanel>

Виджет2.1

<g:HTMLPanel>
    <g:Label>Settings</g:Label>
</g:HTMLPanel>

В «widget2.0.topPanel» у меня есть навигация, которая определяет, какой виджет будет отображаться в «widget2.0.centerPanel». Виджеты, которые должны отображаться в «widget2.centerPanel», — это «widget3.0» и «widget3.1». ».

Виджет3.0

<g:HTMLPanel>
    <g:Label>Content 1</g:Label>
</g:HTMLPanel>

Виджет 3.1

<g:HTMLPanel>
    <g:Label>Content 2</g:Label>
</g:HTMLPanel>

Мой вопрос: как обрабатывать «onPlaceChangeEvent»?

Например, если URL-адрес mydomain.com/myapp.html#home:content1
, приложение должно отображать виджет 1, виджет 2.0 и виджет 3.0.

Если URL-адрес mydomain.com/myapp.html#home:content2
, приложение должно отображать виджет1, виджет 2.0 и виджет 3.1.

Если URL-адрес mydomain.com/myapp.html#settings
, приложение должно отображать виджет1 и виджет 2.1.

Мне интересно между двумя вариантами:

  1. Создать до 2 ActivityManagers. Один для действий из widget1.navigation и один для действий из widget2.navigation. Но что произойдет, если виджет2 будет создан до виджета 1?
  2. Чтобы создать одно действие, которое создает пару представлений.

Код: пример

public class MonthlyViewActivity extends AbstractActivity implements MonthlyView.Presenter {

    private Widget2_0 widget2_0;
    private Widget3_0 widget3_0;

    ......
    public void start(AcceptsOneWidget panel, EventBus eventBus) {
        widget2_0 = new Widget2_0();
        widget3_0 = new Widget3_0();
    ..........
    }
    .... 
}

Какова наилучшая практика для этого случая?


person Devin Konny    schedule 02.11.2012    source источник


Ответы (1)


если вы используете eclipse, создайте архитектуру MVP в своем проекте, она создаст множество файлов, таких как активность, место, один интерфейс, один класс реализации и соответствующий класс ui xml. вам нужно создать класс картографа действий и менеджера истории действий. и в вашем модуле on lode установите место по умолчанию для вашего приложения. после слов в любом вызове события перейдите к методу для любого места и укажите ссылку на свою страницу, и там проверьте получение значения токена и на основе этого значения отобразите свои виджеты, которые вы хотите отобразить.

person Ankit Singla    schedule 08.11.2012