2010-10-28 13 views
9

X bài từ http://drupal.org/node/953016Sử dụng Drupal7 AJAX tốt lành lập trình

Các Drupal 7 hệ thống AJAX là rất tốt, nó hoạt động rất trơn tru cho các hình thức và thậm chí cho các liên kết.

Những gì tôi không thể tìm ra cách làm một cách lành mạnh là gọi nó từ javascript. Tôi có thể muốn có một trang năng động mà không có một hình thức và như là một phần của đó thực hiện một cuộc gọi aupax Drupal, đặc biệt để các lệnh ajax được chạy trở lại.

Cách hiệu quả nhất mà tôi đã tìm thấy để làm điều này cho đến nay là:

dummy_link = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>'); 
    $(vars_div).append(dummy_link); 
    Drupal.attachBehaviors(vars_div); 
    dummy_link.click(); 

Đó là hiệu quả nhưng một hack rất lớn. Tôi không tìm thấy cách nào để thực hiện cuộc gọi ajax và có khung làm việc của Drupal ajax, thay vì khung công tác jquery tiêu chuẩn.

Tôi đã nghĩ rằng có thể gọi trực tiếp ajax trực tiếp của drupal, có ai biết không?

Trả lời

7

Câu trả lời ngắn ngắn là bạn sẽ muốn có được cho mình một cái gì đó như:

$.ajax(ajax.options); 

Đó là phần jQuery, nhưng với một tập hợp các tùy chọn giúp bạn treo vào Goodness Drupal về xử lý thành công, hiệu ứng, vv Đây là những gì có hiệu quả những gì đang xảy ra cho bạn trong ví dụ "hack lớn" của bạn.

Tạo một hàm Drupal.ajax mới programatically vẫn đòi hỏi một yếu tố tổng hợp:

base = 'someid' 
element = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>'); 
element_settings = {'url': uri, 'event': 'click'} 
myAjax = new Drupal.ajax(base, element, element_settings) 

Nhưng bạn có thể ít nhất là kích hoạt nó mà không có mô phỏng một cú nhấp chuột trong giao diện người dùng:

myAjax.eventResponse(element, 'click') 

Nó cảm thấy như nên có một cách tốt hơn để làm điều này, nhưng nó đòi hỏi một cách khác để thiết lập nguyên mẫu ajax ban đầu mà không yêu cầu một phần tử DOM. Bởi vì rất nhiều bộ tương tác đặt bản lề về cách di chuyển dữ liệu trở lại DOM, tôi không nghĩ rằng trường hợp sử dụng này được hỗ trợ tốt. Bạn cũng có thể chuyển trực tiếp đến jQuery với một bộ tùy chọn thích hợp và nhận được hiệu ứng bạn muốn, nhưng các chức năng protoype của Drupal.ajax tự tham khảo khá nhiều để thực hiện nó mà không có lớp Drupal.ajax dicey.

+0

Tôi có cùng một thách thức cơ bản trong Druapl 6 với CTools, và có một mô hình tốt cho cả hai sẽ là tuyệt vời. –

+0

Cảm ơn Josh, tôi đã xem xét việc thực hiện nó mà không có lớp drupal.ajax, nhưng đã đi đến cùng một kết luận mà bạn đã làm. Tôi hài lòng với câu trả lời của bạn, tôi đã lo lắng rằng tôi đã bỏ lỡ một điều gì đó hiển nhiên nhưng không nghĩ rằng tôi đã là bây giờ. –

+0

Tôi sẽ giữ điều này trên radar của mình. Tôi nghĩ rằng một kỹ thuật tốt hơn có thể xuất hiện và chúng ta có thể có một "thực hành tốt nhất" chung cho người khác. :) –

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