it-swarm.asia

التغييرات في الطريقة Drupal 7 يعالج JavaScript و jQuery

أقوم حاليًا بتطوير نص JavaScript يتم تشغيله على صفحة الإدارة. قرأت عن التغييرات التي تم إجراؤها في Drupal 7 ، وهي الانتقال من document.ready() إلى وظيفة jQuery الخاصة بها. ومع ذلك ، لا يعمل البرنامج النصي التالي.

(function ($) {
  console.log('hello');
  $('#edit-apiusername').append('test');
})(jQuery);

console.log() قيد التشغيل ويمكنني رؤية الإخراج ، ولكن الملحق البسيط لا يعمل. معرف الحقل صحيح.
لست متأكدًا مما أفقده هنا ، لكني أشك في أن له علاقة بالطريقة التي أشير بها إلى الشيء. بالنظر إلى كود JavaScript 3 المشاهدات ، أستطيع أن أرى أنه تم بطريقة مماثلة.

14
digital

أعتقد أنك أسأت فهم التغييرات.

يجب تغليف شفرة جافا سكريبت في (function ($) { ... })(jQuery); للسماح باستخدام $ كاختصار لـ jQuery. هذا للسماح jQuery للعب بشكل جيد مع مكتبات أخرى . في هذه الوظيفة ، لا يزال عليك الانتظار حتى يتم تحميل DOM إذا كنت تريد تغييره. هذا ما يفعله التفاف التعليمات البرمجية في jQuery.ready(function(){ ... }).

ولكن بدلاً من استخدام jQuery.ready(function(){ ... }) ، يجب عليك استخدام السلوكيات للسماح لجافا سكريبت في دروبال بأن رمزك يريد معالجة أي شيء تمت إضافته ( أو تمت إزالته ) من DOM .

(function ($) {
  Drupal.behaviors.exampleModule = {
    attach: function(context, settings) {
      $(context).find('#edit-apiusername').append('test');
    }
  }
})(jQuery);
28
Pierre Buyle

قد تفكر أيضًا في اسم مستعار لكائن jQuery بالكامل إلى متغير آخر من اختيارك ، كما في:

$j = jQuery.noConflict();

ستضع هذا خارج البيان الجاهز لتتركه متاحًا خارج التغليف.

1
Artur