it-swarm-vi.com

Làm cách nào để tải chế độ xem bằng ajax để các tệp js / css bổ sung cần thiết cho chế độ xem cũng được tải?

Hiện tại tôi đang sử dụng jQuery để tải một khung nhìn, như thế này:

$.ajax({
    type: 'POST',
    url: Drupal.settings.basePath + 'views/ajax',
    dataType: 'json',
    data: 'view_name=' + viewName + '&view_display_id=default&view_args=' + viewArgument, // Pass a key/value pair.
    success: function(data) {
      var viewHtml = data[1].data;
      target.children().fadeOut(300, function() {
        target.html(viewHtml);

        var newHeightOfTarget = target.children().height();

        target.children().hide();

        target.animate({
          height: newHeightOfTarget
        }, 150);

        target.children().delay(150).fadeIn(300);

        Drupal.attachBehaviors(target);
      });
    },
    error: function(data) {
      target.html('An error occured!');
    }
  });

Vấn đề của tôi là, ví dụ, nếu chế độ xem sử dụng mô-đun 'Trình chiếu trường', các tệp js/css cần thiết để nó hoạt động chính xác sẽ không được tải. Điều gì có thể là một giải pháp Nice (= mèo con không hề hấn gì) cho vấn đề này?

8
Temaruk

Hmm, tôi cảm thấy câu hỏi này xứng đáng nhận được một khoản tiền thưởng lớn hơn :-p nhưng không phải là ít hơn đây là nỗ lực của tôi để trả lời câu hỏi này.

Drupal đã tải thêm bất kỳ css/js nào bây giờ tôi thực sự không thể tìm thấy nhiều tài liệu về nó và thật đáng buồn là các tệp JS không dễ dàng được ghi lại mà không thực sự đọc qua mã nhưng có ở đó.

Bạn thực sự nên cố gắng tránh tự mình yêu cầu $ .ajax và thay vào đó hãy gói mọi thứ bằng Drupal.ajax nếu bạn sử dụng Hệ thống Ajax, bạn thậm chí không cần phải tự viết ajax yêu cầu.

Bằng cách thực hiện một yêu cầu Drupal ajax thích hợp sử dụng các lệnh ajax, hầu hết việc xử lý css/js sẽ được thực hiện tự động cho bạn.

Bằng cách xem mã trên của bạn, có vẻ như bạn đang thực hiện cùng một chế độ xem yêu cầu sẽ tự thực hiện. Vì vậy, có lẽ bạn nên để các khung nhìn xử lý yêu cầu ajax và ghi đè các lệnh ajax sẽ được kích hoạt thành lệnh của bạn. Bạn có thể làm điều này bằng cách triển khai hook_ajax_comamnd_alter nhưng nó khá tệ với lượt xem vì bạn mất tất cả thông tin theo ngữ cảnh nên tôi khuyên bạn nên sử dụng hook_view_ajax_data_alter thay thế.

Tôi biết rằng không có nhiều mã trong câu trả lời của tôi, nhưng thật khó để trả lời bằng mã, vì mã hiện tại không có chính xác.

Để biết thêm thông tin, hãy xem Drupal.ajax trong tệp misc/ajax.js. Để biết ví dụ về việc triển khai yêu cầu ajax với Drupal.ajax, hãy xem tệp ajax xem. Và nếu bạn muốn xem và ví dụ về các chế độ xem hành vi bình thường bị ghi đè bằng cách thay đổi các lệnh ajax, hãy xem mô-đun Views_load_more nơi tôi thực hiện hành vi này.

Ngoài ra xin vui lòng bình luận về câu trả lời này, nếu bất cứ điều gì ở đây không rõ ràng.

Bật và để biết thêm thông tin về Khung công tác Ajax, hãy xem Khung Ajax ví dụ xem mô-đun ví dụ , thậm chí nghĩ rằng hầu hết những gì bạn muốn làm không bao gồm trong mô-đun ví dụ.

7
ericduran