Thực hành AJAX đúng


7

Tôi đã có các loại nội dung được gọi là 'Thảo luận trực tuyến', từ đó được gọi là OD và một loại nội dung gọi là 'Trả lời thảo luận trực tuyến', từ đó được gọi là ODR. Có các tài liệu tham khảo thực thể (drupal.org/project/entityreference) cho nhau.

Khi một ODR được tạo (thông qua biểu mẫu tùy chỉnh giao diện người dùng), nó tham chiếu đến "cha mẹ" của nó (OD có trang được tạo) và thông qua Tham chiếu thực thể tương ứng (drupal.org/project/cer) điều tương tự xảy ra theo cách khác.

Trong trang của OD, thông qua chủ đề, một số lượng ODR được tham chiếu cụ thể được hiển thị, 10 số mới nhất. Chúng được trình bày dưới dạng các thực thể được kết xuất mà không có sự tham gia của View hoặc Panel vào lúc này nhưng tôi sẵn sàng thay đổi điều đó nếu cần thiết.

Mỗi ODR có phiên bản riêng của biểu mẫu trả lời, được tăng cường chức năng trích dẫn.

Ngoài ra, ODR cũng có thể chấp nhận nhận xét từ các vai trò cụ thể, thông qua biểu mẫu mặt trước tùy chỉnh.

Các yêu cầu:

1) Tôi cần một số cách để tải các câu trả lời trước đó (tất cả hoặc theo đợt) với AJAX. Hiện tại tôi đang thực hiện một cuộc gọi lại jQuery ajax đến một trang xem để tìm nạp các ODR trước đó và tôi đưa HTML của chúng vào DOM. Điều đó hoạt động, nhưng trong một kịch bản trường hợp thử nghiệm với hơn 200 nút được tham chiếu, điều đó dường như mất một thời gian

2) Tôi cần một cách mà sau một khoảng thời gian cố định để tìm kiếm ODR mới và nối thêm chúng để OD hoạt động 'giống như thật'. Hiện tại tôi làm điều này theo cách tương tự, và nó có vẻ hoạt động khá ok.

3) Tôi cần một số cách hiệu quả để áp dụng Hành vi Drupal cho các yếu tố mới đến trang web để chúng có chức năng liên kết theo ngữ cảnh, v.v. Tôi đã thực hiện bằng cách sử dụng Drupal.attachBehaviors (ngữ cảnh); nhưng có vấn đề

Các vấn đề cho đến nay:

I. Nhiều trường hợp của cùng một hình thức trên cùng một trang.
Mặc dù Drupal xử lý drupal_html_id () trên tải trang OD ban đầu, cách tôi sử dụng AJAX phá vỡ tính duy nhất của ID. Ví dụ: nếu tôi có 10 biểu mẫu trong lần tải đầu tiên của mình và tôi mang thêm 2 biểu mẫu thông qua AJAX, ID cho 2 lần đầu tiên sẽ được lặp lại kể từ khi tôi lấy toàn bộ giao diện HTML được tạo.

II. Các vấn đề về hiệu suất trong trường hợp 'Tải tất cả các ODR trước đó'. Khá tự giải thích. Kéo hơn 200 thực thể và tiêm HTML của họ là một công việc khá nặng nề.

III. Drupal.attachBehaviors - khi sử dụng AJAX như cách tôi mô tả, HTML cho liên kết theo ngữ cảnh được sản xuất tốt. Vấn đề xảy ra với javascript liên quan đến nó. Vì vậy, sau vài giờ nghiên cứu, vì có rất ít tài liệu về vấn đề này, tôi tình cờ phát hiện ra các hành vi của Drupal đã giải quyết được vấn đề đó, nhưng đã cho tôi một loạt vấn đề mới để giải quyết:

  • các sự kiện onLoad, bây giờ trong một hành vi, chạy mỗi khi một sự kiện AJAX được kích hoạt gây ra nhiều ràng buộc sự kiện (hủy liên kết trước khi giải pháp liên kết tại thời điểm này)
  • một số sự kiện onLoad, như sự sụp đổ của textareas mà nhiều hình thức sử dụng, gây ra các vấn đề về khả năng sử dụng. Ví dụ: bạn đang gõ một câu trả lời hoặc nhận xét, một ODR mới đi vào trang web thông qua cuộc gọi ajax định kỳ và thu gọn văn bản của bạn.
  • khá lộn xộn và ngày càng khó quản lý mã để đảm bảo tôi xử lý tất cả các khả năng thông qua jQuery

Vì vậy, cuối cùng, câu hỏi:

Các thực tiễn tốt nhất trong bối cảnh Drupal để đạt được kết quả được mô tả mong muốn là gì?


Như bạn có thể thấy, Facebook ra lệnh mọi thứ ngày nay;)
magtak

3
Bạn nên thay đổi tiêu đề của mình từ bao gồm "Tốt nhất" vì một người điên nào đó sẽ đến và xem "Tốt nhất" và ngay lập tức đóng câu hỏi thay vì đọc nó. Nó xảy ra. Họ không thích từ "tốt nhất" xung quanh Stack Exchange.
o_O

Câu trả lời:


2

Trước hết, bạn có quá nhiều câu hỏi ở đây. Tôi khuyên bạn nên chia vấn đề này thành nhiều phần nhỏ hơn và cố gắng giải quyết từng vấn đề, thay vì bỏ toàn bộ cuốn tiểu thuyết này vào trao đổi ngăn xếp để ai đó giải quyết tất cả các vấn đề của bạn cho bạn.

Có thể điều đó nghe có vẻ khó khăn, nhưng có một lý do mà bạn chưa có câu trả lời nào.

Tôi có thể chỉ cho bạn về chức năng một lần của Drupal , điều này sẽ giúp bạn giải quyết ít nhất câu hỏi hóc búa onLoad của bạn. (Gợi ý: bạn không nên sử dụng onLoad, bao giờ.)

Nói chung, nếu bạn đang xây dựng một trang web trong Drupal và bạn không thể tìm thấy một mô-đun để làm những gì bạn muốn và bạn thấy mình đang viết rất nhiều PHP hoặc javascript hoặc tùy chỉnh những gì bạn có, bạn có thể muốn xem xét Một cách tiếp cận mới.

Có rất nhiều khung công tác mặt trước có thể cung cấp các thư viện để thực hiện hành vi mà bạn đang cố gắng đạt được. Hãy thử tìm một giải pháp gần với giải quyết vấn đề của bạn, thực hiện tốt dưới tải và sau đó điều chỉnh nó để sử dụng.


Xin vui lòng mở rộng hơn nữa
monymirza
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.