quelle est la différence entre l'utilisation de drupal_add_js et ['#attached']

8

Quelle est la difference entre drupal_add_js()et $form['#attached']['js'][]?
Quel est le but de l'utilisation de chacune des fonctions ci-dessus?

(Je veux dire que je sais qu'il est utilisé pour joindre js pour dire formulaire s'il est utilisé à l'intérieur du formulaire, mais quand est-il drupal_add_jsutilisé et quand est-il $form['#attached']['js'][]utilisé?)

harshal
la source

Réponses:

9

Si vous utilisez drupal_add_js()dans votre fonction de création de formulaire, vous attachez JavaScript à une page, et c'est tout.

Si vous utilisez $form['#attached']['js'], d'autres modules peuvent interagir, le tester et le modifier selon leurs besoins, en utilisant hook_form_alter(). C'est la façon dont vous devez choisir chaque fois que votre JavaScript est fonctionnellement lié à un formulaire particulier.

En dehors de cela, ils sont fonctionnellement les mêmes.

Notez qu'il est généralement préférable d'utiliser des bibliothèques JavaScript que des fichiers JavaScript simples, car ils vous permettent de déclarer des versions, de conserver les relations entre JS et CSS, de gérer les dépendances, eh bien, ils sont généralement beaucoup plus puissants.

Bien sûr, vous devez alors utiliser $form['#attached']['library']lorsque votre bibliothèque JavaScript est liée fonctionnellement à un formulaire particulier, et uniquement drupal_add_library()lorsque aucune forme n'est liée de quelque manière que ce soit à la fonction de la bibliothèque.

Mołot
la source
Donc, pour modifier la page du nœud (node ​​/ [nid]), il faut utiliser drupal_add_js et pour node_form (node ​​/ add), il faut utiliser $ form ['# attaché'] ['js'] .. Ai-je raison?
harshal
Et les blocs?
harshal
@harshal Oui. À moins que votre JS sur nœud / ajout ne soit pas lié à un formulaire d'ajout de nœud et fonctionne sur des éléments qui n'appartiennent pas à ce formulaire. Utilisez ensuite drupal_add_js comme d'habitude.
Mołot
3
@harshal Ne jamais mettre drupal_add_js()dans un fichier modèle, cela cassera les choses lorsque la mise en cache / agrégation est activée
Clive
1
@Clive Eh bien, avec les bibliothèques sur JS nu, je suis d'accord, et j'aurais dû le signaler en premier lieu. Je les utilise depuis mes problèmes avec jQuery Multi. Je voulais juste être sûr que ma réponse était complète et épuiser le sujet.
Mołot