Ciertos formularios son demasiado complicados para que quepan en una página. Si, por ejemplo, un formulario implica grandes cantidades de datos estructurados, como escoger ubicaciones en un mapa, programar eventos en un widget de calendario, o tener ciertas partes de un formulario que cambian dependiendo de la entrada anterior, es de valor para poder romper una cierta forma en varias páginas.Formularios de Yesod con flujo de página
Esto es fácil de hacer con páginas web dinámicas y Javascript, ya que simplemente crearía un widget de pestañas con diferentes páginas, y el formulario real contendría el widget de pestañas completo y todos sus campos de entrada, produciendo un solo POST
solicitar toda la operación
A veces, sin embargo, lleva mucho tiempo generar ciertos campos de entrada; incluso pueden ser computacionalmente intensivos incluso después de que se haya generado la página, lo que grava al navegador del usuario de la computadora de gama baja. Además, se hace difícil o imposible crear formularios que se adapten en función de entradas anteriores.
Por lo tanto, es necesario dividir un formulario determinado en varias solicitudes de página completa.
Esto puede llegar a ser difícil, sobre todo desde la primera página de un formulario se POST
a /location/a
, que emitirá una redirección a /location/b
y pidió que GET
por el cliente. Pasar los datos del formulario almacenado de POST /location/a
a GET /location/b
es donde yace la dificultad.
Erwin Vervaet, el creador de Spring Web Flow (Un subproyecto del framework Spring, conocido principalmente por sus capacidades de inyección de dependencia) una vez escribió a blog article demostrando esta funcionalidad en dicho framework, y también comparándolo con el Lift Web Framework que implementó similar functionality. A continuación, presenta un desafío a otros marcos web, que se describe con más detalle en a later article.
¿Cómo se enfrentaría Yesod a este problema, especialmente teniendo en cuenta su naturaleza basada en REST sin estado?
Esta solución requeriría escribir muchos formularios "manuales", uno para cada página, que empaqueta y descomprime valores y los distribuye (por ejemplo, para la situación en la que el usuario está en la página 2, ingresó cosas en la página 1 y presiona un enlace posterior basado en HTML, el enlace 'GET/page1' debe incluir el estado de formulario ** actualizado ** preferiblemente ** sin la participación de Javascript **). Sin una tonelada de magia en el paquete 'yesod-form', donde había un constructor' AForm' explícito que hacía un seguimiento de las páginas y el análisis de parámetros, y algunos 'FormFooPage <#> R's mágicos, esta solución parece" imposible de implementar ". – dflemstr
Si es necesario, por supuesto, implementaré esta implementación, ya que la idea es muy factible, pero Yesod no podrá ayudarme en absoluto en ese caso, incluso con la representación del campo de formulario. – dflemstr
No estaba discutiendo cómo hacer una API agradable y fácil de usar a partir de esto, cómo funcionarían las internas. Me imagino que, en un nivel alto, tendríamos algo en lo que podría proporcionar una tupla de los formularios individuales que desea ejecutar, y Yesod manejaría automáticamente la contabilidad para usted, y finalmente le proporcionaría una tupla de resultados. Definitivamente es una pregunta interesante, pero creo que la lista de correo podría ser mejor para explicar los detalles que los comentarios de 600 caracteres :). –