как сохранить скромный вид - используя SuggestBox со специальным Oracle и Suggestion

я научился реализовывать свой собственный SuggestionOracle ("AuSuggestOracle") и собственные предложения ("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». поэтому мой вопрос в том, как сделать вид/интерфейс «скромным». в моем случае отображаемые строки предложений неоднозначны, и мне нужен хотя бы «id» выбранного элемента, чтобы знать, какой DTObject выбран.


person dermoritz    schedule 19.04.2011    source источник


Ответы (1)


Способ, которым я обошел это, заключается в том, что я исключил геттеры для Oracle, поскольку, как только мой ведущий устанавливает его, моему представлению не требуется никакой информации об этом. Итак, мой интерфейс выглядел так:

public interface Display {
    ...

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

Проблема, с которой я столкнулся, заключалась в том, что я не мог добавить предложение в SuggestBox после того, как оно было создано. Чтобы обойти это, я инициализировал пустой SuggestBox, а затем удалил его из представления, обновил и вставил обратно на место.

После этого вы можете написать свой обработчик (в презентаторе), чтобы проверить, является ли предложение экземпляром вашего пользовательского предложения, и ваш презентатор может обработать выбор и отправить соответствующую информацию обратно в ваше представление.

Делая это, все, что ваше представление знает, это то, что оно будет принимать общие предложения для чего-то, и что через какое-то время оно будет обновляться информацией (что будет в результате предложения, но представление должно быть «смиренным»). это знать).

person Shawn D    schedule 08.12.2011