2017-01-16 10 views
0

У меня есть основной вопрос, но пока я не нашел удовлетворительного ответа. Должен признаться, я действительно не понимал концепцию поведения. Я понял, что он более гибкий как jQuery(document).ready, потому что его можно уволить несколько раз (например, для ajax-обновлений). Но он не работает всегда как аспект, особенно для работы с несколькими файлами jQuery.Drupal 7 поведение jQuery с несколькими файлами js

Моя конкретная проблема: у меня есть несколько js-файлов, прикрепленных к моему сайту drupal. Некоторые прикреплены к формам, некоторые присоединено через drupal_add_js в модуле, некоторые прикреплены к пользовательскому блоку и т.д. Все файлы выглядят расслоение плотной, как:

(function ($) { 
    Drupal.behaviors.THEMENAME = { 
    attach: function(context, settings){ 
      /* CODE */ 
     } 
    }; 
}(jQuery)); 

Все работает, кроме одного JS-файла не на определенных страницах (на большинстве он работает, но не на узловых страницах [структурированных с помощью модуля страницы]).

Но я не совсем уверен, как назвать поведение. Должны ли они иметь одно и то же имя или разные? Когда я изменяю имя (THEMENAME) и даю уникальные имена (например, соответствующие модули), чем большинство js больше не работают, но тот, который работал только на определенных страницах, теперь работает на каждой странице.

Как это назвать? Различные js не имеют зависимостей, они в основном просто переключаются, показывают, скрывают и css-манипуляции.

ответ

0

Поведение - это объекты JavaScript. Если вы назовете все свое поведение одинаковым, вы снова и снова переопределяете один и тот же объект, и будут выполняться только последние загруженные поведения. Вам нужно найти уникальное имя для каждого другого поведения. Имя может быть любым. Моя рекомендация будет заключаться в том, чтобы прикрепить их все к вашей теме или имени модуля, а затем использовать краткое имя, которое лучше всего описывает, что они делают.

+0

Но когда я это делаю, ни один из моих js-файлов не работает, кроме того, который раньше не работал должным образом. Любое объяснение? Файлы, которые теперь больше не работают, в основном включаются в настраиваемый блок через '$ block ['content'] = array ('#attached' => array ('js' => array ('FILE.js',),); или в форме через '$ form ['# attach'] ['js'] [] = array ('type' => 'file', 'data' => '' FILE.js ',); ' – Mika

+0

Другой скрипт js вызвал ошибку (см. Https://www.drupal.org/node/1181562). Спасибо за вашу помощь. Теперь все работает отлично! – Mika