it-swarm-id.com

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

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 Nice (= kittens unharmed) untuk ini?

8
Temaruk

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 Drupal ajax 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 lihat modul contoh , bahkan berpikir sebagian besar dari apa yang ingin Anda lakukan tidak tercakup dalam modul contoh.

7
ericduran