GWT редакторы для чтения и редактирования

Среда редактора GWT действительно удобна и может использоваться не только для редактирования POJO, но также и для отображения только для чтения.

Однако я не совсем уверен, что лучше всего делать встроенные правки.

Давайте предположим, что у меня есть PersonProxy и у меня есть один Presenter-View пара для отображения и редактирования PersonProxy, Этот Presenter-View должен по умолчанию отображать PersonProxy в режиме только для чтения, и если пользователь нажимает на кнопку редактирования, он должен позволить пользователю редактировать PersonProxy объект.

Решением, которое я придумал, было создание двух редакторов (PersonEditEditor а также PersonDisplayEditor) которые оба добавлены через UiBinder к View, PersonEditEditor содержит ValueBoxEditorDecoratorс и PersonDisplayEditor содержит нормальный Labels,
Изначально я отображаю PersonDisplayEditor и спрятать PersonEditEditor,

в View Я создаю два RequestFactoryEditorDriver для каждого редактора и сделать его доступным из Presenter через View интерфейс. Я также определяю setState() метод в View интерфейс.

Когда Presenter отображается в первый раз, когда я звоню PersonDisplayDriver.display() а также setState(DISPLAYING),

Когда пользователь нажимает кнопку " Изменить", я звоню PersonEditDriver.edit() а также setState(EDITING) от моего Presenter,
setState(EDITING) скроет PersonDisplayEditor и сделать PersonEditEditor видимый.

Я не уверен, что это лучший подход. Если нет, каков рекомендуемый подход для выполнения встроенных правок? Какой лучший способ провести юнит-тестирование в редакторах?

2 ответа

Решение

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

То, что мы делали в нашем приложении, где мы не могли позволить себе затраты на разработку и поддержание двух представлений, заключалось в том, чтобы внедрить два состояния в наши редакторы, например, в пользовательский компонент, который может быть либо меткой, либо текстовым полем (в большинстве В некоторых случаях мы просто устанавливаем текстовое поле только для чтения и применяем некоторые стили, чтобы скрыть границы блока).
Чтобы определить, в каком режиме мы находимся, потому что мы используем RequestFactoryEditorDriver (как и вы), у нас есть наши редакторы HasRequestContext: получение null значение здесь означает, что водитель display() метод был использован, поэтому мы находимся в режиме только для чтения. Альтернативой было бы использовать EditorVisitor наряду с некоторыми HasReadOnly интерфейс (который, кстати, именно то, что RequestFactoryEditorDriver делает, чтобы передать RequestContext до HasRequestContext редактора).

Да, пара Presenter-View должна быть. Но вот два способа достижения этой функции, если вам нравится идти с:

1) Объединить дизайн редактирования / просмотра кода в один код ui.xml ieEdit в EDitHorizonatlPanel и просмотреть код в ViewHorizontPanel. Панель имеет другой идентификатор. Используя id, показать / скрыть панель с методом отображения. если getView().setState() ==Displaying затем показать ViewHorizontPanel, и если getView().setState()==Editing затем покажите EditHorizontPanel.

2) Вместо использования надписей, используйте только текстовые поля. установите свойство Enable равным false, если оно необходимо в режиме просмотра, в противном случае - true

Вы создали два Presenter/view, но я думаю, что если функция Edit/View имеет похожий код, то нет необходимости переписывать один и тот же код снова и снова для целей просмотра.

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

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

Другие вопросы по тегам