О проекте

Данный сайт попытка повысить коммуникацию самых активных разработчиков на CMS Drupal - блоггеров. Если Вы ведете свой блог о Друпале, значит Вы готовы делиться вашими знаниями, помочь другим. Не всегда ваши знания доходят до потребителя. Задача данного сайта агрегировать знания различных блогов в единую ленту и привести на Ваши блоги активных пользователей.

Активность пользователей на Вашем сайте будет дополнительным стимулом к дальнейшей работе.

Удачи во всех Ваших начинаниях!

Drupal 7 и jQuery.once()

-6 votes
+
-

Некоторое время назад писал про Drupal.behaviors и jQuery в «шестерке». Там, как мы помним, чтобы одни и те же действия не выполнялись над элементами многократно, нужно было использовать контекст, а также присваивать и проверять наличие спец. класса. В общем, вот так:
Drupal.behaviors.myModuleBehavior = function(context) {
  $('.module-class-object:not(.module-class-processed)', context).each(function () {
    $(this).addClass('module-class-processed');
    // Do things
  });
};
Как нетрудно догадаться, для каждого нового «поведения» этот код надо копировать (что не очень хорошо).
В Drupal 7, однако, стало гораздо удобнее: в него интегрирована новая функция jQuery — once(). Она умеет присваивать спец. классы и проверять их наличие сама. Вот так:
(function ($) {
  Drupal.behaviors.myBehavior = {
    attach: function (context, settings) {
      $('div.my_behavior').once(function () {
        //этот код выполнится только раз для каждого div.my_behavior, независимо от числа запусков Drupal.attachBehaviors()
      });
    }
  };
}
Прогресс, как говорится, налицо.
Единственный недостаток (если это можно считать недостатком) once() — объекту, возвращаемому селектором $(...), должно быть можно присвоить CSS-класс. То есть запись $(document).once(...) результатов не даст. А вот запись $('body').once(...) — даст.

Полный оригинальный материал:

Graker
Drupal 7 и jQuery.once()