Yanıtlar:
Drupal 7 tarafından kullanılan JavaScript kodu şöyledir:
Drupal.attachBehaviors = function (context, settings) {
context = context || document;
settings = settings || Drupal.settings;
// Execute all of them.
$.each(Drupal.behaviors, function () {
if ($.isFunction(this.attach)) {
this.attach(context, settings);
}
});
};
Drupal 6 benzer kodu kullanır:
Drupal.attachBehaviors = function(context) {
context = context || document;
if (Drupal.jsEnabled) {
// Execute all of them.
jQuery.each(Drupal.behaviors, function() {
this(context);
});
}
};
JavaScript, nesne / dizi özelliklerinin her zaman eklendikleri sırayla geçilmesini garanti ederse, değerler jQuery.each()
ikinci parametre olarak kullanılan işleve, ilk parametre olarak geçirilen diziye eklendikleri sırayla aktarılır.
Bu, eklenen ilk davranışın Drupal.behaviors
önce yürütüldüğü anlamına gelir .
Bu durumda, önce modülünüz tarafından tanımlanan davranışların yürütülmesine izin vermek için, bunun için daha hafif bir ağırlık kullanabilirsiniz. Bunların diğerinden önce yürütülmesini istiyorsanız, modül ağırlığı -50 olarak ayarlanmalıdır; diğer değerler de işe yarayabilir. Drupal 7 kullanıyorsanız, drupal_add_js ()bir ağırlığın JavaScript koduyla ilişkilendirilmesine izin verir; HTML çıktısında önce daha hafif bir JavaScript kodu görünür. Drupal 6 ile bu mümkün değil, diye düşündü.
JavaScript, özelliklerin eklendikleri sırayla geçiş yapıldığını garanti etmez. Bu, farklı JavaScript uygulamalarının aynı özellikleri farklı bir sipariş kullanarak sunacağı anlamına gelir; aynı siparişin aynı tarayıcının farklı sürümlerinde de değişebileceği anlamına gelir.
select name, weight from system where type = 'module' order by weight ASC, name
Drupal.behaviors
; rapor ettiğim gibi $.each(Drupal.behaviors)
nesneleri tanımlayıcılarına dayanarak eklendikleri sırada listeler.
Davranış Ağırlıkları modülünü kullanın .
(Lütfen bir üretim sitesinde kullanmadan önce biraz test yapın)
Modül, davranışlara ağırlık eklemeye izin verir ve daha sonra drupal.attachBehaviors
, ağırlıklara saygı duyan özel bir uygulama ile ele geçirir / değiştirir .
Neden diğer cevapta önerildiği gibi modül ağırlığı?
Bkz
. Bir javascript nesnesindeki alanların sırası, bunlar arasında döngü yaparken öngörülebilir mi? ve
javascript'teki (… in…) döngüsü için Elements order - .
Drupal 6 için -
Taşınabilir olması gerekmiyorsa, basit bir çözüm, en son çalıştırmak istediğiniz JS'yi theme template.php dosyasına koymaktır. Tema drupal_add_js çağrıları her zaman modüllerden sonra çağrılır.
Taşınabilir olması gerekiyorsa, drupal 6'daki "en temiz" çözüm, php ile modülünüzden farklı ağırlıkta yeni bir modül eklemektir. İki modülü aynı klasörde bile alabilir, ilk modülü birincisine bağımlı hale getirebilir ve yükleme / güncelleme kancalarındaki ağırlıkları ayarlayabilirsiniz. Bunlardan hiçbiri gerekli değildir, sadece kurulumu kolaylaştırır.