GWT с MVP: добавить один и тот же презентатор в один контейнер несколько раз - PullRequest
2 голосов
/ 22 января 2010

Я работаю с GWT с шаблоном MVP, фактически реализуя страницу результатов поиска. Результаты поиска представлены картинкой + некоторая информация. Я создал докладчика и представление для результата поиска (пока я буду называть этот небольшой квадрат "миниатюрой"), чтобы я мог добавить его несколько раз на страницу результатов поиска и позже использовать его на других страницах, если необходимо.

В моем SearchResultsPresenter, который избавляется от thumbnailPresenter, я просто зацикливаюсь на результатах поиска, передавая правильную информацию thumbnailPresenter и добавляя «asWidget» представления в контейнер:

display.getResultsContainer().add(goodPresenter.getDisplay().asWidget());

Проблема в том, что я вижу только один результат поиска: похоже, что добавление одного и того же презентатора несколько раз в контейнер не должно быть таким. Я уже некоторое время просматриваю Интернет, но не могу найти какое-либо подходящее решение моей проблемы: (

Кто-нибудь есть решение или направление, чтобы указать мне? При необходимости я могу предоставить вам дополнительную информацию.

С уважением,

Nils

Ответы [ 3 ]

3 голосов
/ 22 января 2010

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

1 голос
/ 22 марта 2010

Используете ли вы Google Gin в сочетании с каркасом gwt-Presenter?

Модуль AbstractPresenterModule GWT-Presenter имеет метод bindPresenter, который связывает указанный класс презентатора как синглтон.

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

Подводя итог, вместо этого:

bindPresenter(FooPresenter.class, FooPresenter.Display.class, FooDisplay.class);

сделать это:

bind(FooPresenter.class);
bindDisplay(FooPresenter.Display.class, FooDisplay.class);
0 голосов
/ 26 января 2010

Да, действительно, одним из решений является создание нового View и нового Presenter. Это может показаться странным, но я подумал, что это запрещено передовой практикой. И это была неправильная мысль!

Так что, просто создавая новый каждый раз и добавляя его, он отлично работает.

...