Drupal'ın ek davranışları: yeni yüklenen tüm içeriklere tepki gösterilsin mi?


12

Birçok açıdan birlikte çalışan iki farklı modülüm var. Birlikte çalıştıkları şeylerden biri, modül A'nın AJAX aracılığıyla içerik yüklediği ve modül B'nin yüklenen içeriğe olay dinleyicileri eklemesi gerektiğidir.

Bununla birlikte, içerik AJAX aracılığıyla modül A tarafından yüklendiğinde, Drupal.behaviours.a 'nın sadece' ekle 'işlevi çağrılır, Drupal.behaviours.b'nin ' ekle 'işlevi çağrılmaz . Her iki işlev de sayfa yüklemesinde çağrılır, ancak sonraki AJAX içerik yüklemesinde çağrılmaz.

// This runs every time module A loads new content.
Drupal.behaviors.a = {
  attach: function(context, settings) {
    alert('a:attach');
  }
}

// This only runs on page load, but never when module A loads new content.
Drupal.behaviors.b = {
  attach: function(context, settings) {
    alert('b:attach');
  }
}    

Herhangi bir modül yeni içerik yüklediğinde Drupal.behaviours.b 'ekle' işlevini nasıl çalıştırabilirim?


Drupal.attachBehaviors();Ajax başarı geri aramasına eklemeyi denediniz mi?
Clive

Hayır, ama bu otomatik olarak halledilmemeli mi? Bunun 'ekleme' işlevi hakkındaki fikrin tamamı olduğunu düşündüm; sayfa yükleme ve sayfa güncellemesinde çağrılmalı mı? Bununla birlikte, çağırma modülü için yalnızca 'ekle' işlevi sayfa güncellemesinde çağrılıyor gibi görünüyor?
sbrattla

Bu benim anlayışımdı evet, ben çok derinlemesine bakmadım. Ben bir AJAX çağrısından sonra davranışları yeniden bağlamak için gerekli zamanlar olduğunu biliyorum, bu yüzden sadece gerekli olduğunu varsaydım
Clive

Drupal.js'ye bakıldığında: "Drupal.attachBehaviors, jQuery ready etkinliğine aşağıda eklenir ve bu nedenle ilk sayfa yüklemesinde çalışır. Çözümlerinde AHAH / Ajax uygulayan geliştiriciler, yeni sayfa içeriği yüklendikten sonra, bu sayfa yeni içeriğe tüm davranışları eklemek için işlenecek öğe. " AttachBehaviours'u kendim çağırmam gerekiyor gibi görünüyor. Fakat; AJAX başarı geri aramada attachBehaviours çağırmadım bile modül A 'ekleme' fonksiyonu çalışır bana bulmaca.? Neden tüm modüller için değil, sadece çağrı yapan modül için?
sbrattla

1
Eğer bir catch-all çözümü $('body').ajaxSuccess(Drupal.attachBehaviors);muhtemelen işe yarayacaksa
Clive

Yanıtlar:


4

Bu, içindeki yorumlardan misc/drupal.js, nasıl çalışması gerektiğini açıklıyor:

  • Drupal.attachBehaviors, jQuery ready olayına aşağıda eklenmiştir ve bu nedenle
  • ilk sayfa yüklemesinde çalışır. AHAH / Ajax'ı kendi uygulamalarında uygulayan geliştiriciler
  • çözümleri, yeni sayfa içeriği tamamlandıktan sonra da bu işlevi çağırmalıdır
  • yüklenecek, işlenecek bir öğeye beslenecek,
  • yeni içeriğe ilişkin davranışlar.

2

Bunu Drupal.behavior.b dosyasına eklemeyi deneyin:

Drupal.attachBehaviors($(this));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.