qual é a diferença entre usar drupal_add_js e ['#attached']

8

Qual é a diferença entre drupal_add_js()e $form['#attached']['js'][]?
Quando é o objetivo de usar cada uma das funções acima?

(Quero dizer, eu sei que ele é usado para anexar js para dizer formulário, se usado dentro do formulário, mas quando é drupal_add_jsusado e quando é $form['#attached']['js'][]usado?)

harshal
fonte

Respostas:

9

Se você estiver usando drupal_add_js()sua função de criação de formulários, está anexando JavaScript a uma página, e é isso.

Se você estiver usando $form['#attached']['js'], outros módulos poderão interagir, testar e alterá-lo conforme necessário, usando hook_form_alter(). É assim que você deve escolher sempre que seu JavaScript estiver funcionalmente relacionado a um formulário específico.

Fora isso, eles são funcionalmente iguais.

Observe que geralmente é melhor usar bibliotecas JavaScript do que arquivos JavaScript simples, pois eles permitem declarar versões, manter relações entre JS e CSS, gerenciar dependências, bem, geralmente são muito mais poderosas.

Obviamente, você deve usar $form['#attached']['library']quando sua Biblioteca JavaScript estiver funcionalmente relacionada a um formulário específico e usar apenas drupal_add_library()quando nenhum formulário estiver relacionado à função da biblioteca.

Mołot
fonte
Então, para alterar a página do nó (node ​​/ [nid]), deve-se usar drupal_add_js e, para node_form (node ​​/ add), deve-se usar $ form ['# attached'] ['js'] .. Estou certo?
harshal
E quanto a blocos?
harshal
@harshal Sim. A menos que sua JS no nó / adição não esteja relacionada a um formulário de adição de nó e funcione em elementos que não pertencem a esse formulário. Em seguida, use drupal_add_js como de costume.
Mołot
3
@harshal Nunca coloque drupal_add_js()em um arquivo de modelo, ele vai quebrar as coisas quando o cache / agregação é ligado
Clive
11
@Clive Bem, com bibliotecas sobre JS nu, eu concordo, e eu deveria ter apontado isso em primeiro lugar. Estou usando-os desde meus problemas com o jQuery Multi. Só queria ter certeza de que minha resposta estava completa e esgotar o tópico.
Mołot 24/10