2011-12-20 10 views
0

MVP、clientFactory、activities、places、およびuiBinderを使用するGWT 2.4アプリがあります。私は独自のui.xmlファイルを使ってスタンドアロンオブジェクトとして作成した複合ウィジェットを持っています。そのクラスを参照し、それをメインのviewImpl.ui.xmlファイルに挿入します。GWTの複合ウィジェットでプレゼンターを設定する方法

コンポジットウィジェットはバックエンドからデータを受け取り、アクティビティに戻してテーブルに表示できるようにする必要があります。私はアクティビティに行くためにビューに関連付けられているプレゼンターを使用しています。ここでは、コードです:ビューインタフェースで :

私の活動の
public interface NameView extends IsWidget 
{ 
    void setPresenter(Presenter presenter); 
...  

public interface Presenter{ 
      void goTo(Place place); 
      void setRowDataList(List<Data> rowData); 
     } 

私はのようにView.Presenterを実装:

Activity extends AbstractActivity implements NameView.Presenter 

ので活動は、私は私のスタンドアロンのウィジェットの中から必要なプレゼンターでありますセットアップに

NameView nameView = clientFactory.getNameView();//NameView is just an example. 
nameView.setPresenter(this); ... 

プレゼンターをし、それをインスタンス化しますし、活動の開始方法で私が使用しています。私の問題は、私はこれを必要とするウィジェットには、次のとおりです。

presenter.setRowDataList(rowData); 

が、私は、ウィジェットからインスタンスプレゼンターを参照するかどうかはわかりませんか?

この個別のウィジェットは、実際にはgwtUploadウィジェットはスタンドアロンです。私はアップロードされたいくつかのデータのサーバー側の計算を行い、それがこのウィジェットに返されます。

ウィジェットデータをActivityに戻して、そのデータをNameViewImplクラスに戻す必要があります。

私はプレゼンターはそれを行うための適切な方法だと思ったが、ウィジェットがビューまたはviewImplに配線されていないので、私は、ウィジェットのためにそのプレゼンターを取得する方法が必要です。

私はジンがDIでそれをするだろうと知っているか、別の発表者を作っているかもしれません。私はGWTでGINをセットアップしたことはありません。これを行う正しい方法としての任意のアイデア?実装の作業

を、これが最良の実装であるかどうか、私は知らないが、トーマスからの回答に基づいて、私はプレゼンター(活動)のインスタンスに私のウィジェットを設定しますViewImplクラスのsetPresenter()メソッドウィジェットがアクティビティに戻るためのパススルーとして機能します。私はそれがトーマスがコールバックインターフェースとして意図したものだと考えています。私は右のあなたを理解していれば

答えて

1

私たちは似たような状況ではなかったものと同様のウィジェットのコールバックインタフェースを(定義することですプレゼンター・インターフェースをあなたのプレゼンター・ビューのペアに入れてください)。そして、プレゼンター・インターフェースをそのウィジェット固有のインターフェースに拡張させます。
次に、ビュー上でsetPresenter(またはそれが呼び出されたもの)を呼び出すと、プレゼンターが関連付けられ、ビューは即座に同じ値を持つウィジェットのsetCallbackを呼び出します(プレゼンターはコールバックインターフェイスを実装します)。

別の設計では、プレゼンターインターフェイスのメソッドの背後にあるウィジェット固有のコールバックを非表示にすることができます。ビューにプレゼンターの同等のメソッドにルーティングされるようなメソッドを実装し、コールバックを実装します。

ここにGINはお手伝いしません。

+0

多くのお返事をいただきありがとうございます。 –

1

は、あなたがオブジェクトの活動、プレゼンターおよびUI(NameView)およびこれら3から分離し、別のオブジェクトの1セットを持っています。分離されたオブジェクトはgwtUploadウィジェットです。

プレゼンターに通知する1つの方法は、eventBusを使用することです。私はあなたがその活動の中で参考になっていると確信しています。私は正確にあなたが「スタンドアロン」オブジェクトによって何を意味するのか分からないgwtUploadについて、あなたはいくつかの種類にeventBusに到達するために、他のプレゼンターへの接続を持っている必要があります。

gwtUploadウィジェットは、サーバ側の計算結果をeventBusに(自身のプレゼンターを介して)イベントを発生させます。モデルオブジェクトのみを結果として送信することをお勧めします。アクティビティは、イベントのeventBusにハンドラを「登録」します。ハンドラでは、表の表示を更新するためにデータをビューに送信できます。私はあなたがこれを解決するためにGINを必要としないと思う

は、どのような場合のために、ここでの開始のために良いチュートリアルです: http://code.google.com/p/google-gin/wiki/GinTutorial

関連する問題