Niektóre formularze są zbyt skomplikowane, aby zmieściły się na jednej stronie. Jeśli na przykład formularz zawiera duże ilości uporządkowanych danych, takich jak wybieranie lokalizacji na mapie, planowanie wydarzeń w widżecie kalendarza lub zmiana niektórych części formularza w zależności od wcześniejszych danych wejściowych, warto mieć możliwość rozbić pewną formę na wiele stron.Formularze Yesod ze strumieniem strony
Jest to łatwe do zrobienia dzięki dynamicznym stronom internetowym i skryptom JavaScript, ponieważ wystarczy utworzyć widżet karty z różnymi stronami, a faktyczny przesłany formularz będzie zawierał cały widget karty i wszystkie jego pola wejściowe, generując pojedyncze: POST
wniosek o całą operację.
Czasami jednak generowanie pewnych pól wejściowych zajmuje dużo czasu; mogą nawet być intensywne obliczeniowo nawet po wygenerowaniu strony, obciążając przeglądarkę użytkownika komputera niższego rzędu. Dodatkowo staje się trudne lub niemożliwe tworzenie formularzy, które dostosowują się do wcześniejszych danych wejściowych.
Dlatego konieczne jest podzielenie określonego formularza na wiele pełnych żądań stron.
ten może okazać się trudne, zwłaszcza, że na pierwszej stronie formularza POST
do /location/a
, który wystawi przekierowanie do /location/b
i zażądał jako GET
przez klienta. Przekazywanie przechowywanych danych formularzy z POST /location/a
do GET /location/b
jest tam, gdzie leży trudność.
Erwin Vervaet, twórca Spring Web Flow (podprojekt wiosennej struktury, znany głównie ze swoich możliwości wtłaczania zależności), raz napisał a blog article demonstrując tę funkcjonalność we wspomnianym frameworku, a także porównując go z Lift Web Framework, który zaimplementował similar functionality. Następnie przedstawia wyzwanie dla innych frameworków internetowych, które są dalej opisane w a later article.
Jak Yesod zmierzyłby się z tym problemem, zwłaszcza biorąc pod uwagę jego bezpaństwowy charakter oparty na REST?
To rozwiązanie wymagałoby napisania wielu "ręcznych" formularzy, po jednym dla każdej strony, które pakują i rozpakowują wartości i wywołują je (na przykład w sytuacji, gdy użytkownik jest na stronie, po wprowadzeniu danych na stronie 1, oraz naciśnie link oparty na HTML, link 'GET/page1' musi zawierać ** zaktualizowany ** stan formularza najlepiej ** sans JavaScript-zaangażowanie **). Bez tony magii w pakiecie 'yesod-form', w którym był jawny konstruktor' AForm' śledzący strony i parsowanie parametrów oraz jakiś magiczny 'FormFooPage <#> R's, to rozwiązanie wydaje się" nie do zaimplementowania ". – dflemstr
Jeśli to konieczne, oczywiście ręcznie wykonam tę implementację, ponieważ pomysł jest bardzo wykonalny, ale Yesod nie będzie w stanie mi w ogóle pomóc w tym przypadku, nawet przy renderowaniu pola formularza. – dflemstr
Nie rozmawiałem o tym, jak stworzyć przyjemny, przyjazny dla użytkownika interfejs API, o tym, jak będą działać wewnętrzne elementy. Mogę sobie wyobrazić, że na wysokim poziomie będziemy mieć coś, w czym moglibyśmy podać krotkę pojedynczych formularzy, które chcielibyście uruchomić, i Yesod automatycznie obsłużyłby księgę dla was, dostarczając w efekcie krotki wyników. Jest to z pewnością interesujące pytanie, ale myślę, że lista mailingowa może być lepsza do ujednolicenia szczegółów niż 600 znaków komentarza :). –