2011-12-12 43 views
1

我正在擴展ScrollPanel,並希望使用此新窗口小部件處理我自己的自定義事件。如果我在GWT中擴展Widget,如何使用祖先的EventBus?

我用兩種方法fireEvent(MyEvent event)HandlerRegistration addMyHandler(MyHandler handler)做了我自己的HasMyHandlers接口。

首先我做了一個私人會員SimpleEventBus eventBus,但接下來認爲祖先類應該已經擁有它自己的副本。

是否可以使用祖先的事件總線,即註冊其中的處理程序並根據它來觸發它們?

回答

3

是的,這是可能的。這樣做的標準方法是在HandlerRegistration addMyHandler(MyHandler handler)實現如下:

public class MyWidget extends Widget implements HasMyHandlers { 

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

    // Other methods 
} 

Widget.addHandler(...)方法提供接線自定義事件處理程序到Widget的HandlerManager機制。

要使用Widget.fireEvent(...)方法將事件發送給所有註冊的處理程序。所以要解僱你的事件中,你可以這樣做:

fireEvent(new MyEvent(yourEventData)); 

值得一提的是您的活動也應延長GwtEvent類。

+0

但是,如何在所有註冊的處理程序發生時觸發事件? – Dims

+0

@Dims我在回答中添加了更多細節。 – Strelok

+0

謝謝。但是,由於Widget.fireEvent接受GwtEvent <>類型的參數,這意味着我有義務用我的事件擴展類,對吧? – Dims