Платформа A2v10 довідкова система
EN


Шаблони. Події

Об'єкт, що описує події в шаблоне, є звичайним об'єктом JavaScript. Імена властивостей цього об'єкта є іменами подій, а значення - функціями, які будуть викликані при виникненні події.

Імена подій формуються різними способами в залежності від типу події:

  • для всієї моделі імена фіксовані.
  • для події створення об'єкту формуються з типу об'єкта і суфіксу .constuct.
  • для подій змінення даних з повного шляху до елементу даних і заданного суфіксу.

Повний шлях до елементу даних фактично являє собою повне ім'я властивості об'єкта, починаючи від кореня моделі. Для вказання елементу масиву використовується суфікс [].

Синтаксис:


Події для всієї моделі

Ці події мають фіксовані імена.

  • Model.load - модель завантажено.
  • Model.unload - модель вивантажена. Жодні дії вже неможливі. Частіше за все використовується для відписки від подій глобальної шини подій.
  • Model.saved - модель збережено.
  • Model.beforeSave - перед зберіганням.

Аргументи для подій моделі:

  • this - корінь моделі даних (IRoot).
  • model - корінь моделі даних (IRoot).
  • caller - посилання на корінь моделі даних (IRoot) об'єкта, що викликає. Наприклад, якщо це модель діалога, то caller буде посиланням на модель, з якої цей діалог було викликано. Може використовуватися для взаємодії елементом, що викликає. Для подій Model.saved, Model.save значення завжди буде undefined.

Події для об'єктів

  • .construct - об`єкт сстворено. Префікс імені події являє собою ім'я типу об'єкта. В обробнику цієї події можна доповнити утворений елемент новими властивостями. Однак, для цього краще використовувати механізм властивостей (properites).
  • .change - значення властивості змінено. Префікс імені події являє собою повний шлях до властивості в моделі даних.
  • .changing - значення властивості буде змінено. Префікс імені події являє собою повний шлях до властивості в моделі даних. Є можливість скасувати змінення.

Аргументи для події .construct:

  • this - корінь моделі даних (IRoot).
  • elem - створений елемент.
  • prop - ім'я властивості батьківського елементу, якому буде присвоєний створений об'єкт. Має сенс для обробників створення елементів в MapObject.
Аргументи для подій .changing, .change:
  • this - корінь моделі даних (IRoot).
  • elem - елемент.
  • newValue - нове значення властивості.
  • oldValue - старе значення властивості.
  • prop - ім'я властивості, що змінюється.
Значення, що повертається, має сенс тільки для події .changing:
  • Boolean - суворе значення false. Скасовує спробу змінення значення властивості. Будь-яке інше значення дозволяє змінення.
Зверніть увагу! При зміненні значень об'єктних властивостей, обидва значення властивості (і старе, і нове) будуть вказувати на один і той самий об'єкт. Це відбувається тому, що об`єкт ніколи не створюється повторно, а просто перезаписуються його властивості.

Події для масивів

Префікс імені для всіх подій масивів являє собою повний шлях до властивості в моделі.

  • [].adding - перед додаванням елементу в масив.
  • [].add - елемент додано в масив.
  • [].change - змінено елемент масива.
  • [].remove - елемент видалено з масива.
  • [].select - елемент масива обрано.

Зверніть увагу! Події будуть генеруватися тільки тоді, коли для маніпуляції з масивами використовуються засоби платформи. Якщо масив змінюється стандартними методами (наприклад push, splice), то події генеруватися не будуть.

Аргументи для подій масивів:

  • this - корінь моделі даних (IRoot).
  • arr - масив, що змінюється.
  • elem - новий або видалений елемент.
Значення, що повертається, має сенс тільки для події .adding.
  • Boolean - суворе значення false. Відміняє операцію додавання елементу в масив.

Користувацькі події

Описані вище події є вбудованими. Однак, ніхто не забороняє використовувати власні події, які можуть більш точно описувати бізнес-логіку програми.

Такі події генеруються методом $emit кореневого об'єкта (IRoot) і можуть мати довільне ім'я (звісно, воно не може співпадати з системними іменами). Методом $emit також можна генерувати і системні події.

Зверніть увагу! Модель подій в системі пов'язана з даними, а не з елементами користувацького інтерфейса. Іншими словами, події виникають тоді, коли змінюються дані. Виникнення подій жодним чином не пов'язане з користувацьким інтерфейсом. Фактично, користувацького інтерфейса може не бути взагалі.