Was ist der Unterschied zwischen der Verwendung von drupal_add_js und ['#attached']

8

Was ist der Unterschied zwischen drupal_add_js()und $form['#attached']['js'][]?
Wann ist der Zweck der Verwendung der oben genannten Funktionen?

(Ich meine, ich weiß, dass es verwendet wird, um js anzuhängen, um Formular zu sagen, wenn es innerhalb des Formulars verwendet wird, aber wann wird es drupal_add_jsverwendet und wann wird es $form['#attached']['js'][]verwendet?)

Harshal
quelle

Antworten:

9

Wenn Sie drupal_add_js()in Ihrer Formularerstellungsfunktion verwenden, hängen Sie JavaScript an eine Seite an, und das war's.

Wenn Sie verwenden $form['#attached']['js'], können andere Module mit ihnen interagieren, sie testen und nach Bedarf ändern hook_form_alter(). Auf diese Weise sollten Sie jedes Mal auswählen, wenn Ihr JavaScript funktional mit einem bestimmten Formular verknüpft ist.

Davon abgesehen sind sie funktional gleich.

Beachten Sie, dass es normalerweise besser ist, JavaScript-Bibliotheken als einfache JavaScript-Dateien zu verwenden, da Sie damit Versionen deklarieren, Beziehungen zwischen JS und CSS beibehalten, Abhängigkeiten verwalten und im Allgemeinen viel leistungsfähiger sind.

Dann sollten Sie natürlich verwenden, $form['#attached']['library']wenn Ihre JavaScript-Bibliothek funktional mit einem bestimmten Formular verknüpft ist, und nur verwenden, drupal_add_library()wenn kein Formular in irgendeiner Weise mit der Funktion der Bibliothek zusammenhängt.

Mołot
quelle
Um also die Knotenseite (node ​​/ [nid]) zu ändern, sollte man drupal_add_js verwenden und für node_form (node ​​/ add) sollte man $ form ['# attach'] ['js'] verwenden. Bin ich richtig?
Harshal
Und was ist mit Blöcken?
Harshal
@ Harshal Ja. Es sei denn, Ihr JS auf Node / Add ist nicht mit einem Node Add-Formular verknüpft und arbeitet mit Elementen, die nicht zu diesem Formular gehören. Verwenden Sie dann wie gewohnt drupal_add_js.
Mołot
3
@ Harshal Niemals drupal_add_js()eine Vorlagendatei einfügen , es wird Dinge brechen, wenn Caching / Aggregation aktiviert ist
Clive
1
@Clive Nun, mit Bibliotheken über nacktem JS stimme ich zu, und ich hätte zuerst darauf hinweisen sollen. Ich benutze sie seit meinen Problemen mit jQuery Multi. Ich wollte nur sicher sein, dass meine Antwort vollständig ist und das Thema erschöpft.
Mołot