Как использовать EventBus для класса без ведущего в GWTP?

Я использую платформу GWTP и eClipse для создания веб-приложения. В Eclipse при создании Presenter создаются 3 файла (например, SearchPresenter.java, SearchView.java и SearchView.ui.xml):

public class SearchView extends ViewImpl implements SearchPresenter.MyView

public class SearchPresenter extends
    Presenter<SearchPresenter.MyView, SearchPresenter.MyProxy>{
    ....
    private EventBus eventBus;
    @Inject
    public SearchPresenter(final EventBus eventBus, final MyView view) {
         super(eventBus, view);
        this.eventBus=eventBus;
    }
}

Чтобы использовать eventBus, мы просто используем eclipse для создания файла EventBus, ex MyEvent.java, затем мы вызываем eventBus в SearchPresenter, используя этот код:

MyEvent mEvent=new MyEvent();
SearchPresenter.this.eventBus.fireEvent(mEvent);

теперь предположим, что у меня есть класс public class SearchDialogBox extends DialogBox, не являющийся ведущим, тогда мой вопрос: как я могу использовать MyEvent в SearchDialogBox? Как получитьEventBus() в SearchDialogBox?


person Tum    schedule 17.10.2013    source источник


Ответы (3)


Я не использую GWTP, но думаю, что все в порядке.

@Inject private EventBus eventBus

должно работать (если вы не используете его в конструкторе SearchDialogBox сразу).

В противном случае попробуйте выяснить, какой класс в GWTP расширяет com.google.gwt.inject.client.Ginjector. Предполагая, что он называется «MyInjector», просто напишите:

private EventBus eventBus = MyInjector.INSTANCE.getEventBus();
person otonglet    schedule 18.10.2013

Взгляните на https://github.com/ArcBees/GWTP/wiki/Events. .

Вы в основном реализуете интерфейс HasHandlers, вводите себе EventBus.

person z00bs    schedule 18.10.2013

  1. Сделайте свой SearchDialogBox для расширения BaseEventHandler:

    SearchDialogBox extends BaseEventHandler<YOUR_EVENT_BUS>    
    
  2. Для DialogBox используйте композицию вместо наследования, так как теперь ваш SearchDialogBox расширяет BaseEventHandler

  3. Аннотируйте свой SearchDialogBox с помощью @EventHandler (и @Singleton, если необходимо)
  4. В YOUR_EVENT_BUS создайте хотя бы один метод, который должен обрабатываться в SearchDialogBox.

    • например, в YOUR_EVENT_BUS:

      @Event(handlers = {SearchDialogBox.class}) void helloWorld();

      и в SearchDialogBox

      `public void onHelloWorld(){...}`
      
person ioanbsu    schedule 18.10.2013