4

私はここ数週間GWTPを試し、それを使って小さなプロジェクトを構築してきました。

ここに質問があります:

データのリストを表示するグリッドウィジェット(添付のスクリーンショット)があります。行のチェックボックスを選択してをクリックするとEdit Request、詳細ページが表示されます。 概要ページ

サマリー画面プレゼンター自体の詳細ページに表示されるすべてのデータ(モデル)があるので、データベースから再度フェッチする必要はありません。

だから、私は次のことをしました:

  1. 選択して編集リクエストをクリックすると、選択したモデルが表示されます
  2. 詳細ページに場所をリクエストします
  3. を起動しedit event、選択したモデルをパラメーターとして渡します。

Edit Requestアイテムを選択してを押すと、詳細ページに選択したアイテムがまだ表示されないため、間違っていることを理解しています。データが入力されていない空白のページが表示されるだけです(イベントが発生するずっと前にその場所に到達しているためです)。

現在のコード:

RequestModel selectedItem = getView().getGrid().getSelectionModel().getSelectedItem();

PlaceRequest placeRequest=new PlaceRequest(NameTokens.initiationedit);  
getEventBus().fireEvent(new RequestEditEvent(selectedItem, PHASE_INITIATION));

placeManager.revealPlace(placeRequest);

個人的に考えた解決策:イベントを発生させる代わりに、選択したアイテムのパラメーターを使用してplacerequestを作成し、idとをオーバーライドしてuseManualRevealデータベースprepareFromRequestから新しいデータをフェッチすることができます。

しかし、既存のデータに対するデータベース呼び出しを回避する方法はありますか。

4

2 に答える 2

1
  1. 現在の「RequestEditEvent」ソリューションを維持したい場合は、必ず使用してください ( http://code.google.com/p/gwt-platform/wiki/GettingStarted?tm=6#Attaching_events_to_proxies@ProxyEventを参照)。

  2. もう 1 つの可能性は、イベントの方向を逆にすることです。詳細プレゼンターで、概要プレゼンターからのデータを要求するイベントを起動します。

  3. ただし、複数のプレゼンター間で同じデータを使用する場合は、データを中央のモデルに保持することをお勧めします。モデル クラス (@Singleton) を作成し、必要な場所に挿入します。次に、サーバーに問い合わせる代わりに、そのローカル モデルから (ID による) 検索を行うことができます。この場合、イベントは必要ありません。たとえば、場所のパラメーターとして、またはモデル内の「currentItemId」としてさえ、どこかに id だけが必要です。

于 2012-12-28T12:29:10.070 に答える
0

@Chris Lercherの回答に基づいて、ProxyEventを使用しました。実装内容は以下のとおりです。

私のRequestEditPresenter(詳細プレゼンター)では、次のようにイベントハンドラーを実装しRequestEditHandlerました

public class RequestEditPresenter extendsPresenter<RequestEditPresenter.MyView, RequestEditPresenter.MyProxy> implements RequestEditHandler{

次に、同じRequestEditPresenterようにメソッドをオーバーライドしますRequestEditHandler

@Override
@ProxyEvent
public void onRequestEdit(RequestEditEvent event) {

    getView().setModelToView(event.getRequestModel());

    ...various other initiation process...

    placeManager.revealPlace(new PlaceRequest(NameTokens.initiationedit));
}

詳細プレゼンターはでしたのでPlace、placeManagerを使用しました。を持たないプレゼンターの場合は、メソッドNameTokenを呼び出すだけです。forceReveal()

于 2012-12-28T18:09:46.370 に答える