it-swarm.asia

كيفية تحميل طريقة عرض مع ajax بحيث يتم تحميل ملفات js / css الإضافية التي يحتاجها العرض أيضًا؟

أستخدم حاليًا jQuery لتحميل عرض مثل هذا:

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

مشكلتي هي أنه على سبيل المثال ، إذا كان العرض يستخدم وحدة "عرض الشرائح الميدانية" ، فلن يتم تحميل ملفات js/css اللازمة للعمل بشكل صحيح. ما الذي يمكن أن يكون حلًا لطيفًا (= قطط دون أذى) لهذا؟

8
Temaruk

حسنًا ، أشعر أن هذا السؤال يستحق مكافأة أكبر: - p ولكن ليس أقل من ذلك ، هنا محاولتي للإجابة على هذا.

يقوم Drupal بالفعل بتحميل أي css/js إضافي الآن لا يمكنني العثور على الكثير من الوثائق عليه ، وللأسف لا يمكن توثيق ملفات JS بسهولة دون قراءة التعليمات البرمجية بالفعل ولكن هناك.

يجب أن تحاول حقًا تجنب تقديم $ .ajax طلب نفسك وبدلاً من ذلك لف كل شيء بـ Drupal.ajax أيضًا إذا كنت تستخدم نظام Ajax فلن تحتاج حتى إلى كتابة طلب ajax بنفسك.

من خلال تنفيذ طلب مناسب Drupal طلب ajax باستخدام أوامر ajax سيتم إجراء معظم معالجة css/js نيابةً عنك تلقائيًا.

من خلال النظر إلى الرمز أعلاه ، يبدو أنك تقوم بإجراء نفس الطلبات التي تقوم بها عادةً بنفسها. لذا ، ربما يجب عليك السماح للآراء بمعالجة طلب ajax والكتابة فوق أوامر ajax التي سيتم إطلاقها لتكون الأمر الخاص بك. يمكنك القيام بذلك إما عن طريق تنفيذ hook_ajax_comamnd_alter ، لكنه سيء ​​مع المشاهدات لأنك تفقد جميع المعلومات السياقية ، لذلك أوصي باستخدام hook_views_ajax_data_alter بدلاً من ذلك.

أعلم أنه لا يوجد الكثير من التعليمات البرمجية في إجابتي ، ولكن من الصعب الإجابة باستخدام التعليمات البرمجية ، حيث إن الرمز الموجود حاليًا ليس صحيحًا لوجوده.

لمزيد من المعلومات ، راجع Drupal.ajax في ملف misc/ajax.js. للحصول على مثال لتنفيذ طلب ajax باستخدام Drupal.ajax ، راجع ملف view ajax. وإذا كنت تريد مشاهدة ومثال على طرق عرض السلوك الطبيعي التي يتم استبدالها عن طريق تغيير أوامر ajax ، فراجع وحدة views_load_more حيث أقوم بهذا السلوك.

لا تتردد أيضًا في التعليق على هذه الإجابة ، إذا كان أي شيء هنا غير واضح.

لمزيد من المعلومات حول Ajax Framework ، وللحصول على مزيد من المعلومات ، انظر Ajax Framework على سبيل المثال ، انظر مثال الوحدة النمطية ، حتى اعتقدت أن معظم ما تريد القيام به غير مغطى في وحدة الأمثلة.

7
ericduran