Конечно, может случиться так, что мой первый проект Grails представляет сумасшедшее несоответствие между моей моделью данных и презентацией, которую хотят дизайнеры пользовательского интерфейса.
Вот упрощенная формулировка пространства задач:
В продуктовом магазине три ингредиента: морковь, сельдерей и помидоры. Целью приложения является сохранение списка покупок пользователя: сколько из каждого купить.
Веб-дизайнеры хотят сделать это с помощью нескольких вариантов HTML SELECT, поэтому вы выбираете из выпадающего списка, какой ингредиент вы хотите купить, а затем введите количество рядом с ним. Если вы хотите больше ингредиентов, вы нажимаете на ссылку JavaScript, которая добавляет больше SELECTs.
В дизайне указано, что каждый раскрывающийся список одинаков и количество строк не ограничено. Таким образом, вы можете получить обратно форму, которая имеет 5 строк, соответствующих 3 моркови, 9 сельдерея, 2 сельдерея, 5 моркови и 1 помидор.
Из этого я «должен» произвести заказ на 8 морковок, 11 сельдереев и один помидор.
Не вдаваясь во все аргументы о том, почему это плохой дизайн пользовательского интерфейса, я хочу на практике понять, как сопоставить модель / контроллер с представлением с учетом такого несоответствия, как для отправки, так и для окончательного редактирования сохраненной отправки. .
Моя первоначальная идея:
- Для входящих данных создайте свежую карту в Контроллере из параметров и некоторой логики, чтобы правильно сложить значения в три новые пары ключ / значение, передав эту новую карту в метод bindData вместо самой карты параметров запроса. ,
- Чтобы представить представление для редактирования, используйте afterInterceptor, чтобы переписать эту часть модели в правильное число этих SELECT, признавая, что мой исходный 5-строчный порядок станет тремя строками, когда он будет представлен для редактирования.
Однако, когда я читаю об объектах Command, мне интересно, будет ли это лучше.
Я прочитал много страниц в Интернете, но не вижу решений для такого несоответствия MVC.
Отбросив очевидный ответ (сразитесь с дизайнерами), каков способ Grails для этого?