2012-04-24 17 views
0

私は、あるデータ( "DataClass")を取得するために別のクラスのサービスを必要とするアクティビティを持っています。このデータクラスは、データを取得するために呼び出すことができ、成功するとイベントを発生させます。 アクティビティが最初に必要なのは、現在の場所によってもたらされた状態を解決し、それに応じてビューを更新するために、データが「開始」にあることです。アクティビティ開始メソッドが最初のイベントを逃す

問題は、アクティビティのonDataEventメソッドが初めて呼び出されるのではなく、その後のイベントで呼び出されることです。私はイベントのハンドラをチェックした。最初のイベントが発生すると、アクティビティはこのイベントに登録されます。私もコンストラクタwithingイベントを登録しようとしましたが、これは何も変更されません。 イベントのアクティビティを登録し、開始メソッド内でトリガして反応させるにはどうすればよいですか?あるいは、そのようなユースケースを一般的に実装する方法。

編集 私はhereのように実装しようとしましたが、成功しませんでした。ここ

は、startメソッドのコードです:

@Override 
public final void start(final AcceptsOneWidget panel, final com.google.gwt.event.shared.EventBus eventBus) { 
    this.eb = new ResettableEventBus(eventBus); 
    if (!(pc.getWhere() instanceof DynamicTablePlace)) { 
     throw new IllegalStateException(CreateDynamicTableActivity.class.getName() + " should only be called on " 
             + DynamicTablePlace.class.getName()); 
    } 
    view.setPresenter(this); 
    this.eb.addHandler(DynamicTableHashResolvedEvent.TYPE, this); 
    stateResolver.resolveState(((DynamicTablePlace) pc.getWhere()).getTablehash(), eb); //this is triggering the event 
    panel.setWidget(view); 
} 

onDynamicTableHashResolved(DynamicTableHashResolvedEventイベント)メソッドが最初に呼ばれたが、後続のすべてのイベントにされていません。

+0

「こちら」はご記入ください。 [SSCCE](http://sscce.org)を含めてください。 –

+0

あなたの質問を正しく理解していれば、アクティビティの初期化時にのみ実行する必要があるコードがありますか? – yair

+0

アクティビティのソースを添付してください。 – cardamo

答えて

0

google groups誰かが私にこの問題を指摘しました。私はすでにこの種の問題を遭遇しました。問題は、ブラウザがいくつかのイベントを処理している(アクティビティの開始メソッドがプレース・チェンジ・イベントで呼び出された)場合、このプロセス内で別のイベントを登録し、登録したばかりのイベントをトリガーすると動作しません。この瞬間。 解決策は単純です:私のコードでは「延期」イベントをトリガ:

 Scheduler.get().scheduleFinally(new ScheduledCommand() { 
     @Override 
     public void execute() { 
      stateResolver.resolveState(((DynamicTablePlace) pc.getWhere()).getTablehash(), eb); 

     } 
    }); 

問題がある:これは、この活動の(GWTのテストケースなし)テスト能力を破ります。 Thomas Broyerから

:スケジューラが注入されている場合、私は正常にテストでき、テスト中に使用するために提供StubSchedulerがあります。私の場合、私はちょうどコマンドを実行するスケジューラーの模擬を作成 - 私の場合はscheduleFinally(ScheduledCommand cmd)のみ実装する必要があります。

関連する問題