it-swarm-eu.dev

Změny ve způsobu Drupal 7 zpracovává JavaScript a jQuery

V současné době vyvíjím skript JavaScript, který běží na stránce pro správu. Četl jsem o změnách provedených v Drupal 7, konkrétně posun od document.ready() k jeho vlastní funkci jQuery. Následující skript však nefunguje.

(function ($) {
  console.log('hello');
  $('#edit-apiusername').append('test');
})(jQuery);

console.log() střílí a vidím výstup, ale jednoduchý dodatek nefunguje. ID pole je správné.
Nejsem si jistý, co mi tady chybí, ale mám podezření, že to souvisí s tím, jak odkazuji na objekt. Při pohledu na JavaScriptový kód Views 3 vidím, že je to provedeno podobným způsobem.

14
digital

Myslím, že jste nepochopili změny.

Kód JavaScript by měl být zabalen do (function ($) { ... })(jQuery);, Aby bylo možné použít $ Jako zástupce jQuery. To umožňuje jQuery hrát pěkně s ostatními knihovnami . V této funkci musíte ještě čekat na načtení DOM, pokud jej chcete změnit. To je to, co zabalí váš kód do jQuery.ready(function(){ ... }).

Ale místo použití jQuery.ready(function(){ ... }), měli byste použijte chování , abyste nechali JavaScript Drupalu vědět, že váš kód chce zpracovat cokoli přidané ( nebo odstraněné ) z DOM .

(function ($) {
  Drupal.behaviors.exampleModule = {
    attach: function(context, settings) {
      $(context).find('#edit-apiusername').append('test');
    }
  }
})(jQuery);
28
Pierre Buyle

Můžete také zvážit přiřazení celého objektu jQuery k jiné proměnné podle vašeho výběru, jako v:

$j = jQuery.noConflict();

Dali byste to mimo připravené prohlášení, abyste je nechali přístupné mimo zapouzdření.

1
Artur