Lepsze zrozumienie zachowań Drupala

51

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.mymoduleprzestrzeń 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?
Haker
źródło
Ten post na blogu od Lullabot doskonale wyjaśnia pojęcia związane z zachowaniami JS: lullabot.com/articles/...
Steve Persch

Odpowiedzi:

56

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. mymoduleto twoja przestrzeń nazw, która musi być unikalna. contextto 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:

Berdir
źródło
2

Krótko mówiąc, Drupal.behaviorsjest lepszym sposobem na wdrożeniejQuery.ready

W przeciwieństwie do tego, jQuery.readyktóry uruchamia się tylko raz, gdy DOM jest gotowy, Drupal.behaviorsmoż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.

Zachowania będą wykonywane przy każdym żądaniu, w tym żądaniach AJAX.

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 ().

vivek agarwal
źródło