В чем разница между использованием drupal_add_js и ['#attached']

8

В чем разница между drupal_add_js()и $form['#attached']['js'][]?
Когда цель использования каждой из вышеперечисленных функций?

(Я имею в виду, я знаю, что он используется для прикрепления js, чтобы сказать форму, если используется внутри формы, но когда drupal_add_jsиспользуется и когда $form['#attached']['js'][]используется?)

harshal
источник

Ответы:

9

Если вы используете drupal_add_js()в своей функции построения формы, вы присоединяете JavaScript к странице, и все.

Если вы используете $form['#attached']['js'], другие модули могут взаимодействовать, тестировать и изменять его по мере необходимости, используя hook_form_alter(). Именно так вы должны выбирать каждый раз, когда ваш JavaScript функционально связан с конкретной формой.

Помимо этого, они функционально одинаковы.

Обратите внимание, что обычно лучше использовать библиотеки JavaScript, чем простые файлы JavaScript, поскольку они позволяют объявлять версии, сохранять отношения между JS и CSS, управлять зависимостями, ну, как правило, они гораздо более мощные.

Конечно, тогда вы должны использовать, $form['#attached']['library']когда ваша библиотека JavaScript функционально связана с конкретной формой, и использовать только drupal_add_library()тогда, когда никакая форма никак не связана с функцией библиотеки.

МОЛОТ
источник
Таким образом, чтобы изменить страницу узла (node ​​/ [nid]), нужно использовать drupal_add_js, а для node_form (node ​​/ add) следует использовать $ form ['# attach'] ['js'] .. Я прав?
13
И как насчет блоков?
13
@harshal Да. Если ваш JS на узле / добавлении не связан с формой добавления узла и работает с элементами, которые не принадлежат этой форме. Затем используйте drupal_add_js как обычно.
Молот
3
@harshal Никогда не вставляйте drupal_add_js()файл шаблона, он сломает все, когда включено кэширование / агрегирование
Клайв
1
@Clive Ну, с библиотеками над голым JS я согласен, и я должен был бы указать на это в первую очередь. Я использую их, так как мои проблемы с JQuery Multi. Просто хотел быть уверен, что мой ответ полный и исчерпать тему.
Молот