В моем проекте я хочу иметь пару представлений/презентаторов, где ведущий является абстрактным классом, который расширяется. Например, мой проект состоит из кучки вопросов, которые задаются по одному за раз. У меня может быть пара представлений/презентаторов для вопроса «да/нет». Я хотел бы иметь презентацию YesOrNo с абстрактными методами, такими как getQuestion, onYes, onNo. Раскрытие этого докладчика задало бы вопрос, и перегруженные uibinderHandlers могли бы позвонить в Yes и onNo. Затем я мог бы продлить презентацию YesOrNo с презентатором HasDogYesOrNo, который будет содержать логику бизнеса о том, что делать, если у пользователя есть собака. У меня может быть что-то похожее на HasCatYesOrNo.GWTP и классы абстрактного презентатора
Так что я создал два класса, которые расширяют общий
YesNoPresenter<T extends Proxy<?>> extends Presenter<YesNo.MyView, T>
и каждый потом определяют классы, как
public class HasCatsYesNoPresenter extends YesNoPresenter<HasCatsYesNoPresenter.MyProxy>
Когда я иду, чтобы связать их у меня есть
bindPresenter(YesNoPresenter.class, YesNoPresenter.MyView.class, YesNoView.class,
HasCatsYesNoPresenter.MyProxy.class);
bindPresenter(YesNoPresenter.class, YesNoPresenter.MyView.class, YesNoView.class,
HasDogsYesNoPresenter.MyProxy.class);
Но я получаю сообщение об ошибке
$MyView is Double-bound: Bound at com.gwtplatform.mvp.client.gin.AbstractPresenterModule ...
Кажется, что я не могу связать двух презентаторов с одним и тем же видом? Я действительно хотел повторить взгляды, но поместил за ними другую бизнес-логику. Есть ли лучший способ сделать это в GWTP? Мои обязательные объекты - это повторное использование одного и того же представления с презентатором бизнес-логики, и каждый из тех, кто представляет бизнес-логику, должен быть закладок. Точно так же, как и мои ведущие бизнес-логики должны быть анонимными классами, но это может потребовать слишком многого.
Есть и другие способы реализации моих презентаторов для моего простого случая YesNo, но у меня есть несколько более сложных презентаторов, которые, как мне кажется, лучший способ повторного использования кода - расширить базовый презентатор с логикой, необходимой для этого ведущего. Примером может служить «данопресент».
Я вижу, мне нужно связать только презентатор с прокси-сервером и bindSharedView, чтобы привязать базовый презентатор к представлению. Но теперь я смущен тем, что должен расширить базовый презентационный (абстрактный) класс? Я спрашиваю, потому что прокси должен быть в классе presenterImpl, но в представлении базового класса? – Michael