Как мне привязать новые компоненты представления к докладчику в шаблоне MVP GWT? - PullRequest
1 голос
/ 24 августа 2011

Я читал Разработка крупномасштабных приложений и MVP , и мне было интересно, как вы, ребята, имеете дело с динамически добавляемыми компонентами в рамках предлагаемого способа реализации шаблона.

Допустим, у вас есть таблица, в которой у вас есть три кнопки в каждой строке таблицы, и строки таблицы можно добавлять динамически. Как бы вы, ребята, предложили привязать их к докладчику?

Новая строка, если она соответствует предложенной Google структуре, будет сгенерирована в представлении, которое не имеет прямой ссылки на докладчика и не может вызвать его обратно (поэтому нет вызова метода bindNewButtons(Button, Button, Button) -ish type).

Итак, что здесь хорошего? Я думал, так как докладчик будет обрабатывать событие, которое добавляет новую строку в виджет внутри представления (обрабатывает как в, запускает метод в представлении, которое генерирует эту новую строку), я мог бы иметь метод getRowButtons(int index) в просмотреть, а затем использовать его для извлечения компонентов и их привязки после их добавления.

Я уверен, что есть более умный способ сделать это, поэтому я ищу здесь небольшой совет.

1 Ответ

2 голосов
/ 24 августа 2011

Вторая статья в этой серии показывает представление, которое имеет ссылку на докладчика.

Представление:

private Presenter<T> presenter;

public void setPresenter(Presenter<T> presenter) {
    this.presenter = presenter;
}

Presenter:

public interface Presenter<T> {
    void onAddButtonClicked();
    void onDeleteButtonClicked();
    void onItemClicked(T clickedItem);
    void onItemSelected(T selectedItem);
}

Теперь вы можете определить метод в интерфейсе Presenter, у которого есть параметр, указывающий, какая строка была нажата.Если вы не хотите, чтобы представление узнало об интерфейсе докладчика, вы всегда можете выбрать событие на шине событий, на которое докладчик может ответить.Однако, исходя из вашего вопроса, первый вариант кажется более разумным.

...