¿Cuál es la diferencia entre usar drupal_add_js y ['#attached']

8

¿Cuál es la diferencia entre drupal_add_js()y $form['#attached']['js'][]?
¿Cuándo es el propósito de usar cada una de las funciones anteriores?

(Quiero decir, sé que se usa para adjuntar js para decir formulario si se usa dentro del formulario, pero ¿cuándo se drupal_add_jsusa y cuándo se $form['#attached']['js'][]usa?)

harshal
fuente

Respuestas:

9

Si está utilizando drupal_add_js()su función de creación de formularios, está adjuntando JavaScript a una página, y eso es todo.

Si está utilizando $form['#attached']['js'], otros módulos pueden interactuar, probar y cambiarlo según lo necesiten, utilizando hook_form_alter(). Esa es la forma en que debe elegir cada vez que su JavaScript esté funcionalmente relacionado con un formulario en particular.

Aparte de eso, son funcionalmente iguales.

Tenga en cuenta que generalmente es mejor usar bibliotecas de JavaScript que archivos JavaScript simples, ya que le permiten declarar versiones, mantener relaciones entre JS y CSS, administrar dependencias, bueno, generalmente son mucho más potentes.

Por supuesto, debe usarlo $form['#attached']['library']cuando su biblioteca de JavaScript esté funcionalmente relacionada con un formulario en particular, y solo drupal_add_library()cuando no haya ningún formulario relacionado de alguna manera con la función de la biblioteca.

Mołot
fuente
Entonces, para alterar la página de nodo (nodo / [nid]) uno debería usar drupal_add_js y para node_form (nodo / agregar) uno debería usar $ form ['# adjunto'] ['js'] ... ¿Estoy en lo cierto?
harshal
¿Y qué hay de los bloques?
harshal
@harshal Sí. A menos que su JS en nodo / add no esté relacionado con un formulario de agregar nodo y funcione en elementos que no pertenecen a ese formulario. Luego use drupal_add_js como de costumbre.
Mołot
3
@harshal Nunca coloque drupal_add_js()un archivo de plantilla, romperá las cosas cuando el almacenamiento en caché / agregación esté activado
Clive
1
@Clive Bueno, con bibliotecas sobre JS desnudo, estoy de acuerdo, y debería haberlo señalado en primer lugar. Los estoy usando desde mis problemas con jQuery Multi. Solo quería estar seguro de que mi respuesta estaba completa y agotar el tema.
Mołot