2012-04-11 79 views
1

我想通過gwt事件總線發送一個對象,我不知道爲什麼它不起作用。GWT事件:我錯過了什麼?

通常,我有一個組件A創建一個彈出窗口。 A註冊到彈出窗口,彈出窗口觸發事件。 現在,偵聽器(OtherComponent)與彈出窗口無關。當彈出窗口觸發事件時,另一個組件不會捕獲它。

這裏是我的代碼:

處理程序:

public interface MyEventHandler extends EventHandler { 
    public void onChanged(MyEvent event); 
} 

事件:

public class MyEvent extends GwtEvent<MyEventHandler> { 
    private static final GwtEvent.Type<MyEventHandler> TYPE = new GwtEvent.Type<MyHandler>(); 

    private MyBean my; 

    public MaterielEvent(My bean) { 
    my = bean; 
    } 

    @Override 
    public com.google.gwt.event.shared.GwtEvent.Type<MyEventHandler> getAssociatedType() { 
    return TYPE; 
    } 

    public static Type<MyEventHandler> getType() { 
    return TYPE; 
    } 

    @Override 
    protected void dispatch(MyEventHandler handler) { 
    handler.onChanged(this); 
    } 

    public MyBean getBean() { 
    return my; 
    } 
} 

組件:

public class OtherPanel extends Composite implements HasMyEventHandlers { 
    interface OtherPanelUiBinder extends UiBinder<Widget, OtherPanel> {} 
    private static OtherPanelUiBinder uiBinder = GWT.create(OtherPanelUiBinder.class); 

    public OtherPanel() { 
    this.addMyEventHandler(new MyEventHandler() { 
     @Override 
     public void onChanged(MyEvent event) { 
     NotificationManager.success("event recieved"); 
     } 
    }); 

    initWidget(uiBinder.createAndBindUi(this)); 
    } 

    @Override 
    public HandlerRegistration addMyEventHandler(MyEventHandler handler) { 
    return addHandler(handler, MyEvent.getType()); 
    } 
} 

調用(內另一個組件):

fireEvent(new MyEvent(myBean)); 

通知「收到的事件」從不會被調用。

我肯定錯過了一些東西。感謝您的幫助

+0

你能告訴周圍的fireEvent調用更多的代碼?你調用一個靜態嗎?如果沒有,哪兒來的eventBus來自於你調用'fireEvent()'? – 2012-04-11 15:43:58

回答

5

您正在創建EventBus的新實例並在該新實例上定義eventHandler。

我看不出你如何調用fireEvent方法(或什麼情況下,你在呼喚它的eventBus的),但你需要在你的代碼中定義您通過圍繞一個 eventBus實例。

所以你實例化一個事件總線,然後定義你想要它的任何處理程序,然後讓任何將與eventBus交互的組件接受一個「MyEventHandler」作爲構造函數的參數。然後,您可以將預定義的事件總線實例傳遞給該組件,從而允許該組件稍後與您的應用程序具有的單一事件總線進行交互。

+0

我正在使用fireEvent()和Widget類的addHandler()。 – 2012-04-11 16:13:31

+0

對於我們的項目,我們使用一個靜態的EventBus字段來解決這個問題可能會出現,因爲我們有幾個需要通信的GWT模塊,另外,'Widget'的事件方法與EventBus的事件方法沒有任何關係,它們不能相互通信。 – 2012-04-11 16:59:03