我在我的 gwt 项目中使用 mvp4g。对于我的一位演示者,我正在使用选项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在调用第一个事件时再次调用方法。
我可以在方法(直接调用)完成时从 to 设置变量,但binded我不确定这是否是正确的方法......BaseEventHandlertrueObjectPresenterbind
你能给我一个提示如何处理这个问题吗?
谢谢你的帮助。