2012-01-20 87 views
20

在gwt-user.jar中有2個EventBus接口和SimpleEventBus實現。我應該使用哪個GWT EventBus?

com.google.gwt.event.shared.EventBuscom.google.web.bindery.event.shared.EventBus 我將把這些作爲 'gwt.event' 和 'web.bindery'。

查看JavaDocs和源代碼我可以看到gwt.event僅僅包裝了web.bindery。然而,gwt.event的實現也隱藏了一些不推薦的方法

那麼我應該使用哪種實現? (我在GWT 2.4上)

+1

我有同樣的困境。也許,許多人都這樣做。我忽略了棄用的建議並使用舊的軟件包,因爲谷歌已經在那裏創建了一個混亂。 –

回答

19

通常你應該使用com.google.web.bindery中的那個。唯一的版本是com.google.gwt.event,但是當RequestFactory和AutoBeans從GWT本身移出並進入com.google.web.bindery時,它們可以在非GWT客戶端中工作。

如果您在演示者等中使用com.google.web.bindery版本,則可以在需要時更輕鬆地使用外部GWT應用程序。將該實例傳遞給PlaceController以及其他使用EventBus的類時,您也不會收到棄用警告。

+0

啊!非GWT客戶非常有意義。 – checketts

+3

如果您使用活動和場所,則start方法中的活動需要com.google.gwt.event.shared.EventBus –

0

使選擇更加複雜。我在我的GWT應用程序中使用番石榴,谷歌的人又在那裏添加了另一個EventBus(甚至更少的功能完成)。

也許這些人需要坐在一起並定義一個實現來統治他們呢?

很顯然,我想避免GWT代碼中的所有依賴關係,因爲這些代碼在GWT代碼中沒有嚴格使用,所以番石榴對我來說很有意思。

4

我知道這個問題已經有了答案,但可能值得添加以下內容。正如我在上面的評論中所說的,Activity仍然需要com.google.gwt.event.shared.EventBus類。爲了避免過時的警告,我做了以下(我用GIN):

public class GinClientModule extends AbstractGinModule { 

    @Override 
    protected void configure() { 
     bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class); 
     ... 
    } 

    @Provides 
    @Singleton 
    public com.google.gwt.event.shared.EventBus adjustEventBus(
      EventBus busBindery) { 
     return (com.google.gwt.event.shared.EventBus) busBindery; 
    } 

... 

通過這樣做,你將永遠是使用對象從裝訂包裝的「新」事件總線的版本。