Полный цикл в digital

Объекты и namespace BX

В файлах скриптов можно указывать произвольный код, перечень функций и вообще всё, что сможет корректно отработать. Но такой подход сильно усложняет чтение, отладку и последующие доработки кода, пример процедурного кода:

script.jslet data = new Date();
  function dateTaim() {
    let result = data.getTime();
    alert(result);
  }

Я предпочитаю создавать объект, который будет в себе содержать все свойства и методы, относящиеся к конкретному компоненту:

script.jslet componentData = {
  data: new Date(),
  dateTaim: function () {
    let result = componentData.data.getTime();
    alert(result);
  },
};

Название componentData не самый лучший и очевидный вариант именования. В Bitrix и Bitrix24 объекты распределены в пространстве имён BX., что позволяет случайно не переопредилить существующей функционал и внести некоторую ясность в то, с чем мы работаем в данный момент.

Создание объекта в пространстве имен и инициализация

Для создания цепочки объектов в js библиотеке Bitrix предусмотрен метод BX.namespace(namespaceName). Этот метод создаст требуемыое пространство имён, если оно отсутствует и вернёт на него ссылку:

script.jsBX.namespace("HM.Data.Hed");
BX.HM.Data.Hed = {
  text: "",
  data: new Date(),
  dateTaim: function () {
    let result = BX.HM.Data.Hed.data.getTime();
    alert(BX.HM.Data.Hed.text + result);
  },
};

Инициализация объекта

Для выполнения кода, достаточно сделать вызов:

template.php// добавляем расширение, которое содержит данное пространство имен
\Bitrix\Main\UI\Extension::load('hmarketing.test');
<script>
    BX.ready(function() {
        BX.HM.Data.Hed.text = "Время: ";
        BX.HM.Data.Hed.dateTaim();
    })
</script>

Создание объекта в пространстве имен с методом init() и инициализация

Альтернативным вариантом будет добавление метода init(), который будет принимать объект с параметрами, распределять их по нужным свойствам. Иными словами, создадим конструктор нашего объекта:

script.jsBX.namespace("HM.Data.Hed");
BX.HM.Data.Hed = {
  text: "",
  data: new Date(),
  name: {},
  dateTaim: function () {
    let result = BX.HM.Data.Hed.data.getTime();
    alert(this.name.name + this.name.surname + this.text + result);
  },
  init: function (params) {
    this.text = params.text;
    this.name = params.name;
    this.dateTaim();
  },
};

Инициализация объекта

template.php// добавляем расширение, которое содержит данное пространство имен
\Bitrix\Main\UI\Extension::load('hmarketing.test');
<script>
    BX.ready(function() {
        let componentParams = {
            text: "время: ",
            name: {
                name: "Иван ",
                surname: "Иванов "
            }
        }
        BX.HM.Data.Hed.init(componentParams);
    })
</script>

Самовызывающиеся объекты

Самовызывающиеся объекты, могут быть хорошим вариантом реализации, например для обработчиков событий, после объявления объекта вешаем событие и теряем с ним связь:

script.jsBX.namespace("HM.button");
BX.HM.button = {
  init: function () {
    let block = document.querySelector(".border");
    let btn = block.querySelector(".tekst");
    btn.addEventListener("click", function (e) {
      alert(123);
    });
  },
};
BX.ready(() => {
  BX.HM.button.init();
});
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг