特定のフォームは複雑すぎて1ページに収まりません。たとえば、マップ上の場所を選択する、カレンダーウィジェットでイベントをスケジュールする、フォームの特定の部分を以前の入力に応じて変更するなど、フォームに大量の構造化データが含まれている場合は、複数のページにわたって特定のフォームを分割します。Yesod forms with page flow
これは動的ページとJavaScriptで簡単に行うことができます。別のページでタブウィジェットを作成するだけで、実際に送信されるフォームにはタブウィジェットとその入力フィールドがすべて含まれているため、POST
操作全体の要求。
ただし、特定の入力フィールドを生成するのに時間がかかることがあります。たとえページが生成された後であってもローエンドのコンピュータユーザのブラウザに課税される場合でさえ、計算的に集中することさえあるかもしれない。さらに、以前の入力に基づいて自分自身に適応するフォームを作成することは困難または不可能になります。
したがって、複数のフルページリクエストにわたって特定のフォームを分割する必要があります。
これは特に、フォームの最初のページから、困難であることを証明することができますPOST
/location/b
へのリダイレクトとクライアントによってGET
として要求を発行します/location/a
、へ。 POST /location/a
からGET /location/b
に格納されたフォームデータを渡すことは、困難がある場所です。
Spring Web Flowの作成者であるErwin Vervaet(主に依存性注入機能で知られているSpringフレームワークのサブプロジェクト)は、一度、a blog articleを書いて、実装したLift Web Frameworkと比較していますsimilar functionality。その後、彼は他のWebフレームワークに挑戦を提示します。これについては、a later articleで詳しく説明されています。
Yesododは、このステートレスなRESTベースの性質を考慮して、この問題にどのように直面しますか?
この解決方法では、各ページに1つずつ、値をパックして展開したり、それらをディスパッチする(たとえば、ユーザーがページ2にいるとき、ページ1にアイテムを入力した場合、 HTMLベースのバックリンクを押すと、リンク 'GET/page1'は、**更新された**フォーム状態、好ましくは** sans Javascript-involvement **を含んでいなければなりません。明示的な 'AForm'コンストラクタがページとパラメータの解析を追跡している' yesod-form'パッケージと、いくつかの魔法の 'FormFooPage <#> R'がある場合、この解決策は"実現不可能 "と思われます。 – dflemstr
もちろん、アイデアは非常に現実的なので、この実装は必要に応じてハンドリングしますが、フォームフィールドレンダリングを使用しても、Yesodは私を助けてくれません。 – dflemstr
私は素敵な、ユーザーフレンドリーなAPIの作り方、内部の仕組みについては議論していませんでした。私たちは、高いレベルで、実行したい個々のフォームのタプルを提供することができると思っています.Yeodは自動的にブックキーピングを処理し、最終的に結果の組を提供します。それは間違いなく興味深い質問ですが、私はメーリングリストが600文字のコメントより詳細をハッシングする方が良いかもしれないと思っています:) –