我的问题是如何停止触发事件总线的无关事件。因为我得到了对话框的这个解决方案。但在一个实例已经初始化并尝试创建同一类的新实例的情况下它不起作用。
举个例子:下面的滚动面板已初始化处理程序。它用于文档预览。
class TestScroll extends ScrollPanel
{
public TestScroll(){
}
implemented onload()
{
// eventBus.addHandler code here.
//here some preview related code
}
unload() method
{
//eventBus remove handler code
}
}
此预览有一些数据,其中包含一些打开不同预览但具有相同类和不同数据结构的链接,现在问题就像 onUnload(其中包含删除处理程序的代码)事件未加载,因为打开了其他面板。这并不意味着之前的面板卸载。所以在这种情况下,注册了两次事件处理程序。当一个事件触发时,另一个事件也触发了。
因此,Preview 1数据显示正确,但在Preview2打开之后,当我关闭它时,我发现Preview1=Preview2。
那么我该如何处理这种情况呢?
根据没有创建的实例,每个事件都被触发。但我必须在事件本身中使用 if 条件检查一些唯一的文档 ID。还有其他方法可以阻止不相关的事件触发吗?
编辑:
public class Gwteventbus implements EntryPoint {
int i=0;
@Override
public void onModuleLoad() {
TestApp panel=new TestApp();
Button button=new Button("Test Event");
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
TestApp panel=new TestApp();
int j=i;
new AppUtils().EVENT_BUS.fireEventFromSource(new AuthenticationEvent(),""+(j));
i++;
}
});
panel.add(button);
RootPanel.get().add(panel);
}
}
public class AppUtils {
public static EventBus EVENT_BUS = GWT.create(SimpleEventBus.class);
}
public class TestApp extends VerticalPanel{
String testString="";
public TestApp( ) {
AppUtils.EVENT_BUS.addHandler(AuthenticationEvent.TYPE, new AuthenticationEventHandler() {
@Override
public void onAuthenticationChanged(AuthenticationEvent authenticationEvent) {
System.out.println("helloworld"+authenticationEvent.getSource());
}
});
}
}