Некоторые формы слишком сложны, чтобы их можно было разместить на одной странице. Если, например, форма включает в себя большое количество структурированных данных, таких как выбор местоположений на карте, планирование событий в виджетах календаря или изменение определенных частей формы в зависимости от более раннего ввода, это имеет значение, чтобы иметь возможность разбить определенную форму на нескольких страницах.Формат Yesod со страничным потоком
Это легко сделать с динамическими веб-страницами и Javascript, так как можно просто создать виджет с разными страницами, а фактическая поданная форма будет содержать весь виджет вкладки и все его поля ввода, что даст один POST
запрос на всю операцию.
Иногда, однако, для создания определенных полей ввода требуется много времени; они могут даже быть интенсивно вычислительными, даже после того, как страница была сгенерирована, облагая налогом браузер младшего компьютерного пользователя. Кроме того, становится трудно или невозможно создавать формы, которые адаптируются на основе более раннего ввода.
Поэтому возникает необходимость разделить определенную форму на несколько запросов полной страницы.
Это может оказаться трудным, особенно после первой странице формы будет POST
к /location/a
, который будет выдавать редирект на /location/b
и запрошена GET
клиентом. Трудность заключается в передаче данных хранимой формы от POST /location/a
до GET /location/b
.
Erwin Vervaet, создатель Spring Web Flow (подпроект Spring Framework, в основном известный своими возможностями впрыска зависимостей), однажды написал a blog article, демонстрируя эту функциональность в указанной структуре, а также сравнивая ее с платформой Lift Web Framework, которая реализовала similar functionality. Затем он представляет проблему для других веб-фреймворков, которая далее описана в a later article.
Как бы Йесод столкнулся с этой проблемой, особенно учитывая ее беззастенчивый характер на основе REST?
Это решение потребует написания множества «ручных» форм, по одному на каждую страницу, которое упаковывает и распаковывает значения и отправляет их (например, для ситуации, когда пользователь находится на странице 2, введя данные на странице 1 и нажимает обратную ссылку на основе HTML, ссылка 'GET/page1' должна включать ** обновленное ** состояние формы предпочтительно ** без участия Javascript **). Без тонны магии в пакете 'yesod-form', где был явный конструктор' AForm', отслеживающий страницы и парсинг параметров, и некоторые магические 'FormFooPage <#> R', это решение кажется« нереализуемым ». – dflemstr
Если это необходимо, я, конечно же, буду выполнять эту реализацию, поскольку идея очень возможна, но Yesod не сможет мне вообще помочь, даже при рендеринге полей. – dflemstr
Я не обсуждал, как сделать из этого приятный, удобный API, как работают внутренние элементы. Я бы предположил, что на высоком уровне у нас будет кое-что, где вы могли бы обеспечить кортеж отдельных форм, которые вы хотите запустить, и Yesod автоматически обрабатывал бы бухгалтерский учет для вас, в конечном итоге предоставляя вам набор результатов. Это определенно интересный вопрос, но я думаю, что список рассылки может быть лучше для хэширования деталей, чем с комментариями в 600 символов :). –