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?


8

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 tốt đẹp (= mèo con không hề hấn gì) cho vấn đề này?


Có vẻ như điều này sẽ được giải quyết trong D8 drupal.org/node/561858 . Chuyển đường dẫn đến tệp js / css trong Drupal.sinstall.mymodule và nhận chúng bằng jQuery.getScript () và jQuery.getCSS () (từ github.com/furf/jquery-getCSS ) có thể là một cách giải quyết ...
Temaruk

Rõ ràng Khung công tác Ajax đã lười biếng tải các tệp css / js / thư viện trong D7. Vẫn phải đào sâu hơn, nhưng tôi cảm thấy giải pháp có thể là một cuộc gọi lại menu ajax tùy chỉnh cho mỗi lượt xem với phân phối trang ajax ...
Temaruk

Tôi đã có một vấn đề tương tự , vẫn chưa được giải quyết mặc dù tôi đã đặt một liên kết đến nó ở đây.
lụaAdmin

Tôi không biết đủ để viết một câu trả lời đầy đủ, nhưng tôi nghĩ API AJAX của Chaos Tools đã giải quyết được vấn đề này. Bạn có thể muốn sử dụng nó hoặc kiểm tra nó. Trường có thể chỉnh sửa cũng xử lý vấn đề này bằng cách nào đó, vì vậy nó có thể là một số mã tham chiếu để kiểm tra.
wizonesolutions

1
@silkAdmin, tôi cũng đăng câu trả lời cho câu hỏi của bạn. Ngoài ra, cần lưu ý rằng trong D7 bạn không thực sự cần sử dụng ctools. Khung công tác Ajax nằm trong D7 Core ( api.drupal.org/api/drupal/includes--ajax.inc/group/ajax )
ericduran

Câu trả lời:


7

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 aupax Drupal thích hợp bằng cách sử dụng các lệnh ajax, hầu hết việc xử lý css / js sẽ được thực hiện cho bạn một cách tự động.

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.

Trên và để biết thêm thông tin về Khung công tác Ajax, hãy xem Khung công tác 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ụ.


Đó phải là hướng đi đúng, nhưng trước tiên tôi muốn xác minh. Kể từ khi đặt câu hỏi, tôi đã có được một số kinh nghiệm với Khung Ajax của Drupal 7, như tạo và sử dụng các lệnh ajax tùy chỉnh. Tôi sẽ xem xét lại vấn đề của mình và xem những gì có thể được thực hiện, và cập nhật với thông tin về những phát hiện của tôi! Cảm ơn!
Temaruk

url bạn đang giới thiệu không tồn tại: api.drupal.org/api/drupal/includes--ajax.inc/group/ajax
shekoufeh
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.