Я использую mvp4g в своем проекте gwt. Для одного из моих докладчиков я использую вариант multiple=true
, и я создаю и привязываю докладчиков таким образом:
ObjectPresenter mainObject = eventBus.addHandler(ObjectPresenter.class, false);
mainObject.setId(id);
mainObject.bind();
view.addWidget(mainObject.getView().asWidget());
ObjectPresenter расширяет LazyPresenter.
Когда я вызываю первое событие из eventBus
, перехваченное ObjectPresenter
, снова вызывается метод bind()
из LazyPresenter
.
bind
метод имеет внутри дерева другие методы: createPresenter(); view.createView(); bindView();
. В методе bindView
из ObjectPresenter
я изменяю свое представление, добавляя следующие виджеты. Поскольку метод вызывается дважды (один раз непосредственно мной и один раз фреймворком), некоторые виджеты дублируются.
Я отладил код и обнаружил, что эта часть кода из BaseEventHandler
вызывается при вызове события из eventBus
:
public final boolean isActivated( boolean passive, String eventName, Object... parameters ) {
boolean activated = this.activated && pass( eventName, parameters );
if ( activated ) {
if ( passive ) {
return binded;
} else {
onBeforeEvent();
if ( !binded ) {
bind();
binded = true;
}
}
}
return activated;
}
После прямого вызова bind
(через mainObject.bind()
) связанное свойство в BaseEventHandler
не устанавливается в true
, поэтому метод bind
вызывается снова при вызове первого события.
Я могу установить переменную binded
из BaseEventHandler
в true
в ObjectPresenter
, когда метод bind
(вызываемый напрямую) завершен, но я не уверен, что это правильный подход...
Не могли бы вы подсказать мне, как бороться с этой проблемой?
Спасибо за вашу помощь.