2013-03-08 77 views
0

我在GWTP中遇到了一些事件問​​題。GWTP:事件和嵌套主持人

我有一個擴展TabContainerPresenter的MainPresenter。 這個演示者鏈接到一個MainView,它包含一些ui組件+一些com.gwtplatform.mvp.client.Tab:HomeTab,ContactTab等等。

MainPresenter應該到一些事件「MyEvent」反應 MyEvent都有相應的MyHandler的和已創建以下這些好的做法http://arcbees.wordpress.com/2010/08/24/gwt-platform-event-best-practice/

當我的MainView的這樣的UI組件觸發一個事件:

MyEvent.fire(this, new MyEventContext(..)); 

我正確地抓住了MainPresenter中的事件。

但是,當我在「Tab Presenter」中完全相同時,該事件不會被MainPresenter捕獲。

例如,在HomePresenter這是MainPresenter的「HomeTab」,當我做

MyEvent.fire(this, new MyEventContext(..)); 

我能趕上從HomePresenter事件而不是從MainPresenter。

有什麼想法?

+0

您正在使用什麼版本? – Branflake2267 2013-03-09 17:03:06

回答

1

請務必遵守這些規則:

  1. 你在查看注入EventBus是com.google.web.bindery.event.shared.EventBus(而不是com.google.gwt.event.shared.EventBus
  2. 在處理該事件(HomePresenter或MainPresenter)演示,註冊使用addRegisteredHandler方法的情況下,onBind生命週期方法中:

    @Override 
    protected void onBind() { 
        super.onBind(); 
    
        addRegisteredHandler(MyEvent.getType(), this); 
    } 
    

我不知道你做了什麼特別的錯誤。爲了幫助您,我製作了a quick proof of concept,其中顯示事件可以從選項卡式演示者發送到TabContainerPresenter。克隆這個項目,然後前往#!settingsPage。您將看到兩個「Fire true」和「Fire false」按鈕,這些按鈕將觸發ApplicationPresenter將捕獲的事件。

+0

首先,讓我感謝你的這個令人敬畏的POC,這是理解發生了什麼問題的絕佳基礎。 – user2147970 2013-03-12 11:14:56

+0

很高興! – spg 2013-03-12 14:21:32

0

首先,讓我感謝你這個令人敬畏的POC,這是瞭解發生了什麼問題的良好基礎。我看到我實際上並沒有以良好的方式使用GWTP。

根本的問題是,我有2型動物eventBus 只見它試圖

Log.info("eventBus: "+eventBus) 
在MainPresenter

,並在HomePresenter。日誌顯示它們沒有相同的哈希碼。

這是由於這樣的事實,有時,我做訪問直接EventBus:

EventBus.Util.getInstance(); 

儘管placeManager與實例:

DelayedBindRegistry.bind(GWT.create(MyInjector.class))