Czytałem dzisiaj o zachowaniach Drupala i próbowałem napisać następujący kod.
(function ($) {
Drupal.behaviors.mymodule = {
attach: function (context, settings) {
$('#mymodule_id', context).change(function () {
alert('Handler for .change() called.');
});
}
};
}(jQuery));
- Czy
Drupal.behaviors.mymodule
przestrzeń nazw? - Jakie parametry kontekstu i ustawień są przekazywane do zachowania Drupala?
- Czy to jest odpowiednik
document.ready()
? - Czy mogę dołączyć dowolną liczbę funkcji?
- Czy mogę zdefiniować funkcje JavaScript, które będą gdzieś wywoływane?
7
javascript
Haker
źródło
źródło
Odpowiedzi:
Krótko mówiąc, zaletą Zachowań
document.ready()
jest to, że są one automatycznie ponownie stosowane do każdej zawartości ładowanej przez AJAX.mymodule
to twoja przestrzeń nazw, która musi być unikalna.context
to część strony, do której ma to zastosowanie, na przykład część formularza zaktualizowanego za pomocą AJAX. Możesz dołączyć wiele zachowań, ale myślę, że musisz użyć unikalnej nazwy (mymodułu) dla każdego z nich.Więcej informacji znajdziesz w następujących zasobach:
źródło
Krótko mówiąc,
Drupal.behaviors
jest lepszym sposobem na wdrożeniejQuery.ready
W przeciwieństwie do tego,
jQuery.ready
który uruchamia się tylko raz, gdy DOM jest gotowy,Drupal.behaviors
może być uruchamiany wiele razy podczas wykonywania strony.Na przykład w widokach przewijania nieskończonego więcej elementów zostanie załadowanych, gdy użytkownik kliknie przycisk wczytaj więcej, stąd DOM zmieni się po początkowym załadowaniu.
Co jeśli chcemy dodać klasy do nowo dodanych elementów? Tutaj przydają się zachowania Drupala.
Drupal wywoła zachowania dołączone, gdy DOM zostanie załadowany, a także gdy zostanie zmieniony przez Ajax, przekazując dwa argumenty
kontekst i ustawienia
Przy pierwszym wywołaniu Drupal.attachBehaviors () zmienna kontekstowa zawiera obiekt dokumentu reprezentujący DOM, ale dla reszty wywołań kontekst będzie zawierał dotknięty fragment HTML.
ustawienia zawierają informacje przekazywane do JavaScript przez PHP, podobnie jak uzyskiwanie do nich dostępu za pośrednictwem Drupal.settings.
Ponadto moduły mogą również wywoływać Drupal.attachBehaviors ().
źródło