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?
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
Eğer bir catch-all çözümü
—
Clive
$('body').ajaxSuccess(Drupal.attachBehaviors);
muhtemelen işe yarayacaksa
Drupal.attachBehaviors();
Ajax başarı geri aramasına eklemeyi denediniz mi?