Bagaimana cara memuat tampilan dengan ajax sehingga file js / css tambahan yang dibutuhkan oleh tampilan juga dimuat?


8

Saat ini saya menggunakan jQuery untuk memuat tampilan, seperti ini:

$.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!');
    }
  });

Masalah saya adalah, bahwa misalnya jika tampilan menggunakan modul 'Field Slideshow', file js / css yang diperlukan agar berfungsi dengan baik tidak dimuat. Apa yang bisa menjadi solusi bagus (= anak kucing yang tidak terluka) untuk ini?


Tampaknya ini akan diselesaikan di D8 drupal.org/node/561858 . Melewati jalur ke file js / css di Drupal.settings.mymodule dan mendapatkannya dengan jQuery.getScript () dan jQuery.getCSS () (dari github.com/furf/jquery-getCSS ) bisa menjadi solusi ...
Temaruk

Rupanya Kerangka Ajax sudah malas memuat file css / js / library di D7. Masih harus menggali lebih dalam, tapi saya merasa solusinya bisa menjadi menu panggilan balik kustom ajax per tampilan dengan pengiriman halaman ajax ...
Temaruk

Saya memiliki masalah yang sama , saya masih belum terpecahkan meskipun saya akan menempatkan tautan di sini.
silkAdmin

Saya tidak cukup tahu untuk menulis jawaban lengkap, tetapi saya pikir API AJAX Chaos Tools sudah dapat memecahkan masalah ini. Anda mungkin ingin menggunakannya atau memeriksanya. Bidang yang Dapat Diedit juga menangani masalah ini, jadi mungkin perlu beberapa kode referensi untuk diperiksa.
wizonesolutions

1
@silkAdmin, saya mengirim jawaban untuk pertanyaan Anda juga. Juga harus dicatat bahwa di D7 Anda tidak perlu menggunakan ctools. Kerangka kerja Ajax ada di D7 Core ( api.drupal.org/api/drupal/includes--ajax.inc/group/ajax )
ericduran

Jawaban:


7

Hmm, saya merasa pertanyaan ini layak mendapat hadiah yang lebih besar :-p tetapi tidak kurang inilah upaya saya untuk menjawab ini.

Drupal sudah memuat tambahan css / js sekarang saya tidak bisa menemukan banyak dokumentasi di dalamnya dan sayangnya file JS tidak mudah didokumentasikan tanpa benar-benar membaca kode tetapi ada di sana.

Anda benar-benar harus mencoba untuk menghindari membuat $ .ajax meminta sendiri dan bukannya membungkus semuanya dengan Drupal.ajax juga jika Anda menggunakan Sistem Ajax Anda bahkan tidak perlu menulis ajax meminta diri Anda.

Dengan menerapkan permintaan ajax Drupal yang tepat menggunakan perintah ajax sebagian besar penanganan css / js akan dilakukan untuk Anda secara otomatis.

Dengan melihat kode Anda di atas, sepertinya Anda membuat permintaan yang sama dengan biasanya. Jadi Anda mungkin harus membiarkan pandangan menangani permintaan ajax dan menimpa perintah ajax yang akan dipecat menjadi perintah Anda. Anda dapat melakukan ini dengan mengimplementasikan hook_ajax_comamnd_alter tetapi agak menyebalkan dengan pandangan karena Anda kehilangan semua informasi kontekstual jadi saya akan merekomendasikan menggunakan hook_views_ajax_data_alter sebagai gantinya.

Saya tahu tidak ada banyak kode dalam jawaban saya, tetapi sulit untuk menjawab dengan kode, karena kode yang ada saat ini tidak benar.

Untuk informasi lebih lanjut lihat Drupal.ajax di file misc / ajax.js. Untuk contoh penerapan permintaan ajax dengan Drupal.ajax lihat file views ajax. Dan jika Anda ingin melihat dan contoh tampilan perilaku normal ditimpa dengan mengubah perintah ajax lihat modul views_load_more di mana saya melakukan perilaku ini.

Juga silakan mengomentari jawaban ini, jika ada yang tidak jelas di sini.

Aktif dan untuk info lebih lanjut tentang Kerangka Ajax lihat Kerangka Ajax misalnya melihat modul contoh , bahkan berpikir sebagian besar yang ingin Anda lakukan tidak tercakup dalam modul contoh.


Itu pasti arah yang benar, tetapi saya ingin memverifikasi dulu. Sejak mengajukan pertanyaan, saya mendapatkan pengalaman dengan Kerangka Ajax Drupal 7, seperti membuat dan menggunakan perintah ajax khusus. Saya akan meninjau kembali masalah saya dan melihat apa yang dapat dilakukan, dan memperbarui dengan info tentang temuan saya! Terima kasih!
Temaruk

url yang Anda referensikan
shekoufeh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.