2012-02-09 32 views
1

我試圖用GWT/GIN做我的第一步。GWT - 綁定activityMapper與GIN不工作

我已經從google下載了hellomvp示例,並按照tutorial開始使用杜松子酒。

我的問題是關於這一行的HelloGinModule級的配置法:

bind(ActivityMapper.class).to(AppActivityMapper.class).in(Singleton.class); 

在我的角度來看,應該我的課「AppActivityMapper」綁定作爲活動ActityManager。但實際上,類構造函數(或類的任何方法)從不被調用,所以觸發的事件不會被捕獲。

類AppActivityMapper看起來是這樣的:

public class AppActivityMapper implements ActivityMapper { 

     Provider<HelloActivity> helloActivityProvider; 
     Provider<GoodbyeActivity> goodbyeActivityProvider; 

     @Inject 
     public AppActivityMapper(final Provider<HelloActivity> helloActivityProvider, final Provider<GoodbyeActivity> goodbyeActivityProvider) { 
      this.helloActivityProvider = helloActivityProvider; 
      this.goodbyeActivityProvider = goodbyeActivityProvider; 
     } 


     @Override 
     public Activity getActivity(Place place) { 
      if (place instanceof HelloPlace) { 
       return helloActivityProvider.get(); 
      } else if (place instanceof GoodbyePlace) { 
       return goodbyeActivityProvider.get();    
      } 

      return null; 
     } 
} 

在我的例子,從我的瀏覽級這段代碼是點擊鏈接後,叫:

presenter.goTo(new GoodbyePlace(name)); 

該事件被觸發的事件總線。但沒有任何反應。

在此先感謝

回答

1

你已經在你GIN某處定義的活動映射。但活動映射器必須在活動管理器中使用。你在哪裏創建將使用你的AppActivityMapper的活動管理器? 更新

最合乎邏輯的事情是讓活動經理脫離杜松子酒。例如。在ginjector你將有一個方法:

interface MyInjector extends Ginjector { 
    ... //other methods 

    ActivityMapper getActivityMapper(); 

} 

比,當你創建ginjector例如,你可以創建一個管理者,並把正確的活動映射到它。例如:

MyInjector injector = GWT.create(MyInjector.class); 
    ActivityManager manager = new ActivityManager(injector.getActivityMapper(), injector.getEventBus()); 

如果您有多個經理和映射器,可能會更好擴展ActivityManager類(所以你可以注入的東西到它的構造)。另一種解決方案是使用@Provides來初始化ActivityManager。

+0

好吧,我認爲這是關鍵。我沒有得到ActivityMapper和ActivityManager的區別。 你能告訴我,定義活動管理器的最佳做法是什麼? – Lodger 2012-02-09 14:06:17

+0

@Lodger我已經更新了我的帖子 – jusio 2012-02-09 14:31:47

+0

另一個選擇,也許更貼近使用Gin/Guice的想法是在ActivityManager的模塊中定義一個Provider或@Provides方法。 gwt/gin項目示例中的一個例子https://github.com/niloc132/tvguide-sample-parent/blob/master/tvguide-client/src/main/java/com/acme/gwt/client/ioc/ TvGuideClientModule.java#L98 – 2012-02-10 19:13:17