我在我的 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
我不确定这是否是正确的方法......BaseEventHandler
true
ObjectPresenter
bind
你能给我一个提示如何处理这个问题吗?
谢谢你的帮助。