0

自分のSuggestionOracle( "AuSuggestOracle")と自分のSuggestions( "AuMultiWordSuggestion")を実装する方法を学びました。私の場合、提案オブジェクトはDTOで構成されています。選択イベントでは、適切に反応するためにこのdto(またはその一部のフィールド)が必要です。この特別なオラクルとそれらの間のいくつかのロジックを使用して、3つの提案ボックスを含むウィジェットを実装しました。今、私はMVPパターンを適用したいと思います-このウィジェットをプレゼンターとビューで分割します。現時点では、プレゼンターの表示インターフェイスは次のようになっています。

    public interface Display {
            HasSelectionHandlers<Suggestion> getFedLand();
            HasSelectionHandlers<Suggestion> getCounty();
            HasSelectionHandlers<Suggestion> getCommunity();
            AuSuggestOracle getFedLandOracle();
            AuSuggestOracle getCountyOracle();
            AuSuggestOracle getCommunityOracle();
            void clearCounty();
            void clearCommunity();
            void activateForm();
            Widget asWidget();
    }

問題は、「AuSuggestOracle」を返すメソッドのモデルに関する暗黙知です。だから私の質問は、ビュー/インターフェイスを「謙虚」にする方法です。私の場合、表示される提案文字列はあいまいであり、どのDTObjectが選択されているかを知るには、少なくとも選択されたアイテムの「id」が必要です。

4

1 に答える 1

1

私がこれを回避する方法は、プレゼンターが設定すると、私のビューにはそれに関する情報が必要ないため、Oracleのゲッターを除外することです。だから、私のインターフェースは次のようになりました:

public interface Display {
    ...

    void setSuggestionOracle(SuggestOracle oracle);
    HasSelectionHandlers<SuggestOracle.Suggestion> getSelectionListener();
}

私が遭遇した問題は、インスタンス化された後に提案をSuggestBoxに追加できることでした。これを回避するために、空白のSuggestBoxで初期化してから、ビューから削除し、更新して、元の位置に戻しました。

その後、(プレゼンターで)ハンドラーを記述して、提案がカスタム提案のインスタンスであるかどうかを確認し、プレゼンターが選択を処理して、関連情報をビューにプッシュバックできます。

これを行うことで、あなたの見解は、何かについて一般的な提案を取り、後で情報で更新されることを知っています(これは提案の結果ですが、見解は「謙虚」ですそれを知るために)。

于 2011-12-08T21:23:37.700 に答える