GWT: как запускать пользовательские события из просмотра и использовать активность - PullRequest
1 голос
/ 21 марта 2011

Я не могу сделать, чтобы пользовательское событие было получено в действии. Может кто-нибудь сказать мне, что я скучаю? Я использую GWT 2.1, шаблон MVP и UiBinder.

Вот пример того, что я написал:

Допустим, у меня есть класс MyCustomEvent и интерфейс его обработчика MyCustomEventHandler с его методом onMyCustomEvent(MyCustomEvent event).

Я реализую интерфейс обработчика в Activity:

    class MyActivity extends AbstractActivity implements MyCustomEventHandler {
    ....

      public void onMyCustomEvent(MyCustomEvent event) {
        doWhatYouKnow();

      }

      //EventBus is injected with GIN
       public void start(AcceptsOneWidget container, EventBus eventBus) {


        ...         
        eventBus.addHandler(MyEvent.TYPE, this);


    }    



}

Теперь отправляющая часть в виде:

    public class MyWidget extends Composite {

    final PopUpPanel myPopUp;

        public MyWidget() {
             initWidget(uiBinder.createAndBindUi(this));

             myPopUp.addCloseHandler(new CloseHandler<PopupPanel>() {

            @Override
            public void onClose(CloseEvent<PopupPanel> event) {

                       MyEvent event = new MyEvent();
               fireEvent(event);

            }

        });

         }

}

Нет исключений, и, к сожалению, onMyCustomEvent никогда не вызывается в классе MyActivity. Любая идея? Спасибо миллион.

Ответы [ 2 ]

0 голосов
/ 22 марта 2011

Я думаю, что один из ваших комментариев указывает вам правильное направление здесь. Что я собираюсь догадаться, так это то, что у вас есть более одного EventBus плавающего числа (обычно должно быть только одна шина событий на приложение).

Прежде всего, убедитесь, что EventBus в вашем модуле Gin связан с областью Singleton. Также убедитесь, что это шина событий, которую вы передаете своему PlaceController, а не та, которую вы создаете самостоятельно.

Кроме того, я бы не слишком беспокоился о том, что ваш объект - ResettableEventBus в одном месте. Я полагаю, что это просто объект, созданный платформой Activity / Places, который просто оборачивает объект EventBus, который вы ему предоставили.

0 голосов
/ 21 марта 2011

@ MyWidget

вы можете заставить конструктор принимать параметр (eventBus) который вы можете передать это из класса MyActivity

поэтому при срабатывании события @MyActivity действие будет выполнено @ MyWidget

попробуй, думаю, это сработает.

...