Một số biểu mẫu nhất định quá phức tạp để chúng vừa với một trang. Ví dụ, nếu một biểu mẫu liên quan đến số lượng lớn dữ liệu có cấu trúc, chẳng hạn như chọn vị trí trên bản đồ, lập lịch sự kiện trong tiện ích con lịch hoặc có một số phần nhất định của biểu mẫu thay đổi tùy thuộc vào đầu vào trước đó, nó có giá trị để có thể chia nhỏ một biểu mẫu nhất định trên nhiều trang. Điều này rất dễ làm với các trang web động và Javascript, đơn giản là tạo một tiện ích tab với các trang khác nhau và biểu mẫu được gửi thực tế sẽ chứa toàn bộ tiện ích tab và tất cả các trường nhập của nó, cho một POST
yêu cầu cho toàn bộ hoạt động.Các mẫu Yesod có lưu lượng trang
Đôi khi, tuy nhiên, phải mất một thời gian dài để tạo ra các trường nhập nhất định; họ thậm chí có thể được tính toán chuyên sâu ngay cả sau khi trang đã được tạo ra, đánh thuế trình duyệt của người dùng máy tính cấp thấp. Ngoài ra, nó trở nên khó khăn hoặc không thể tạo ra các hình thức thích ứng với bản thân dựa trên đầu vào trước đó.
Do đó, cần phải chia nhỏ một biểu mẫu nhất định cho nhiều yêu cầu trang đầy đủ.
Điều này có thể chứng minh là khó khăn, đặc biệt là kể từ trang đầu tiên của biểu mẫu sẽ POST
đến /location/a
, sẽ chuyển hướng đến /location/b
và yêu cầu GET
của khách hàng. Việc chuyển dữ liệu biểu mẫu được lưu trữ từ POST /location/a
đến GET /location/b
là nơi gặp khó khăn.
Erwin Vervaet, tác giả của Spring Web Flow (Một tiểu dự án của khung công tác Spring, được biết đến với khả năng tiêm phụ thuộc của nó) một khi đã viết a blog article thể hiện chức năng này trong khuôn khổ nói trên và so sánh nó với Khung Web nâng similar functionality. Sau đó, ông trình bày một thách thức đối với các khung công tác web khác, được mô tả chi tiết hơn trong a later article.
Yesod sẽ đối mặt với vấn đề này như thế nào, đặc biệt là xem xét tính chất dựa trên REST không trạng thái của nó?
Giải pháp này sẽ yêu cầu viết nhiều biểu mẫu "thủ công", một cho mỗi trang, đóng gói và bỏ gói các giá trị và gửi đi (ví dụ cho trường hợp người dùng ở trên trang 2, đã nhập nội dung trên Trang 1 và nhấn một liên kết ngược dựa trên HTML, liên kết 'GET/page1' phải bao gồm trạng thái biểu mẫu ** được cập nhật ** tốt hơn ** sans tham gia Javascript **). Không có nhiều ma thuật trong gói 'yesod-form', nơi có một hàm tạo' AForm' rõ ràng theo dõi các trang và phân tích cú pháp tham số, và một số phép thuật 'FormFooPage <#> R', giải pháp này có vẻ" không thể thực hiện được ". – dflemstr
Nếu cần thiết, tất nhiên, tôi sẽ thực hiện việc triển khai này vì ý tưởng rất khả thi, nhưng Yesod sẽ không thể giúp tôi trong trường hợp đó, ngay cả khi kết xuất biểu mẫu. – dflemstr
Tôi đã không thảo luận làm thế nào để tạo ra một API thân thiện, thân thiện với người dùng trong số này, chỉ cách thức các internals hoạt động. Tôi sẽ tưởng tượng rằng, ở mức độ cao, chúng tôi sẽ có thứ gì đó để bạn có thể cung cấp một loạt các biểu mẫu riêng lẻ mà bạn muốn chạy, và Yesod sẽ tự động xử lý việc lưu trữ sách cho bạn, cuối cùng cung cấp cho bạn một bộ kết quả. Đó chắc chắn là một câu hỏi thú vị, nhưng tôi nghĩ rằng danh sách gửi thư có thể tốt hơn cho việc băm nhỏ chi tiết hơn 600 nhận xét nhân vật :). –