2011-08-04 27 views
5

Đây là một câu hỏi thiết kế hơn là kỹ thuật, nhưng nó đã khiến tôi hoàn toàn bối rối.Jquery XHR dẫn đến sự thay đổi về sự tồn tại, thông qua làm mới, v.v.

Vì vậy, tôi có trang web (được lưu trữ qua công cụ ứng dụng của Google) liệt kê một số biểu mẫu riêng biệt (mỗi câu hỏi/câu đố). Một câu đố duy nhất có một số hộp văn bản để điền vào, cũng như một nút gửi. Sau khi nhấn gửi, yêu cầu ajax được thực hiện cho máy chủ (chạy python) để kiểm tra xem câu trả lời có đúng hay không. Đáp lại, trang cập nhật bằng cách thêm các dấu tích và dấu thập phân phù hợp bằng các hộp văn bản có liên quan, cũng như lớp phủ trung bình có độ mờ bao phủ toàn bộ câu hỏi (để cung cấp toàn bộ hiệu ứng "có màu xám").

Khi trang được làm mới, những sửa đổi này rõ ràng biến mất. Tuy nhiên, yêu cầu ajax lưu thông tin trả lời vào cơ sở dữ liệu. Các câu hỏi được tạo ra bằng cách hiển thị trang bằng cách sử dụng Jinja2.

Vì vậy, tất cả dữ liệu liên quan được lưu để lần tiếp theo người dùng quay lại trang, câu hỏi mà anh ấy trả lời trước đây vẫn chuyển sang màu xám, câu trả lời và dấu tích/dấu chéo vẫn ở đó. Tuy nhiên, tôi không thể tìm ra cách tốt nhất để làm điều này. Tôi có sửa mã cứng các sửa đổi dom cho các câu hỏi đã hoàn thành hay không bằng cách sử dụng các câu lệnh trong vòng jinja2 (ví dụ: đối với mỗi câu hỏi được tạo ra, nếu câu hỏi đó đã được trả lời sau đó sẽ hiển thị nó theo cách khác). Hoặc, sẽ tốt hơn nếu để trang tải bình thường, và sau đó thực hiện XHR tải trên cho mỗi câu hỏi/biểu mẫu trên trang?

Thực sự những gì tôi muốn làm là, khi mỗi biểu mẫu được hiển thị trong Jinja2, hãy thực hiện một xhr để xem nó có câu trả lời trong db hay không, và nếu có hành động phù hợp. Nhưng pha trộn jinja2 với ajax có vẻ khá lộn xộn, chắc chắn có một cách tốt hơn để đi về điều này?

Xin lỗi vì câu hỏi dài phức tạp, hy vọng ít nhất là dễ hiểu.

Trả lời

1

Tôi muốn chọn một biến thể của tùy chọn # 1 (sử dụng Jinja2 để hiển thị đánh dấu thích hợp) - trừ khi bạn đang hiển thị rất số lượng lớn các biểu mẫu, trang sẽ trở lại theo thứ tự rất ngắn (và nếu bạn do có số lượng biểu mẫu rất lớn, làm cho một số lượng lớn các yêu cầu XHR sẽ không nhanh hơn). Ngoài ra, bằng cách cho phép Jinja hiển thị HTML của bạn, bạn đảm bảo rằng người dùng không có JavaScript ít nhất có thể thấy câu trả lời trước của họ (thay vì buộc tất cả những người truy cập ứng dụng của bạn phải bật JavaScript.)

Bạn sẽ muốn hai điều (nếu bạn không 't đã có chúng):

  1. Cách đại diện cho biểu mẫu/câu hỏi của bạn - có thể bạn sẽ thấy một lớp học phù hợp nhất với loại đóng gói bạn cần.

  2. Cách hiển thị trường hợp của lớp này thành HTML. Đây là chính xác loại điều mà macros được thiết kế cho. Ngoài ra, bạn có thể cung cấp cho lớp học của bạn một phương thức __html__, (nhớ trả lại một thể hiện của Markup).

+0

Cảm ơn - điều đó chắc chắn đã cho tôi một chút rõ ràng. Làm nó jinja2 chắc chắn là con đường để đi, bạn nói đúng - và vĩ mô âm thanh tốt. Cho đến nay tôi chỉ có một vòng lặp {% cho%} khuấy động biểu mẫu nhiều lần với các biến có liên quan, đó là lý do tại sao nó cảm thấy vụng về đang cố sửa đổi điều đó. – Cerzi

Các vấn đề liên quan