簡體   English   中英

如何在Composite擴展類中獲取EventBus實例?

[英]How to get EventBus instance in Composite extending class?

如何在com.google.gwt.user.client.ui.Composite擴展類中獲取com.google.web.bindery.event.shared.EventBus實例?

我讀過: 如何在GWTP中的非Presenter類中使用EventBus? ,但我正在尋找類似的答案:

GWT開發的最佳方法

我有一個小部件,我想觸發一個事件IndicatorEvent 但是在此小部件中,我沒有此事件的處理程序。

處理程序在其他類中。 所以要開火,我將使用:

fireEvent(new IndicatorEvent("Custom Widget Message"));

方法fireEventcom.google.web.bindery.event.shared;EventBus

public abstract void fireEvent(Event<?> event);

因此,我需要View類中擴展了CompositeEventBus實例。 此視圖沒有MVP內容(演示者,uihandler等),它很簡單,是一個類元素/小部件。

我應該采取哪種方法?

  • 我應該將其轉換為Presenter/View對嗎? (在gwtp演示者中,是PresenterWidget類的EventBus引用),然后使用ui處理程序,將執行從視圖委派給演示者?
  • 我應該inject EventBus實例注入小部件類嗎?

請幫忙。

任何小部件都可以在不使用EventBus的情況下觸發事件。

如果您知道此事件的接收者,則只需將處理程序直接附加到接收者即可。 為此,您可以在復合窗口小部件中定義此方法:

public HandlerRegistration addIndicatorEventHandler(IndicatorEventHandler handler) {
    return addHandler(handler, IndicatorEvent.TYPE);
}

然后在其他小部件(收件人)中:

myCustomWidget.addIndicatorEventHandler(new IndicatorEventHandler() {

    @Override
    public void onIndicator(IndicatorEvent event) {
        // do something
    }

});

如果(a)兩個小部件(觸發事件和事件接收者)之間沒有直接/容易的鏈接,(b)有很多接收者,和/或(c)您不想創建一個,則需要使用EventBus。包含事件觸發小部件和事件接收者的代碼部分之間的依賴性。

我們只能為每個視圖分配單個組件。 因此,首先使用方法沒有任何意義,因為我們為特定視圖中的所有小部分創建了許多組件/小部件。

如果我們已經在使用諸如gin或dagger2之類的依賴注入框架,則第二種方法相對來說更討人喜歡。

我可以添加另一種方法,就是在組件中使用簡單的setter方法,以便從父類(例如我們正在使用/創建組件對象的presenter或controller)傳遞eventBus實例。

我的結論是,它絕對取決於組件的目的和實現。 如果我們有說明某些常見行為的接口實現或演示者實現類型的組件,那么第二種方法是最佳的選擇。 另一方面,如果我們只有簡單的平面分量只占很小的一部分,我將推薦第三種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM