Скриптинг в формах
------------------

Основные требования и некоторые детали задачи описаны в
соответствующей постановке: `«Скриптинг в формах» <http://tdd.lan.arta.kz/docs/additional/statements/3/html/forms63.html>`_

В данном же документе описываются все используемые для
скриптинга модели, свойства и методы.

Примеры использования скриптинга см. `здесь <http://tdd.lan.arta.kz/docs/synergy/tags/wilkes/sdk-doc/html/extfp-usecases/extfp-usecases.html>`_

**Используемые технологии и библиотеки:**

*   `jQuery`
*   `Underscore` - утилиты
*   `Backbone` - UI компоненты
*   `Marionette` - UI компоненты
*   `jQuery ui` - UI компоненты
*   `math.js` - поддержка математики больших чисел
*   `base64.js` - добавляет методы btoa, atob для браузеров,
    в которых их нет (в частности IE 9, 10)
*   `XregExp.js` - поддержка более сложных регулярных
    выражений

Схемы работы проигрывателя
~~~~~~~~~~~~~~~~~~~~~~~~~~

.. figure:: _static/img/schema_1.png

    Общая схема работы проигрывателя

.. figure:: _static/img/schema_2.png

    Процесс изменения модели

.. figure:: _static/img/schema_3.png

    Процесс изменения значения компонента

.. figure:: _static/img/schema_4.png

    Взаимодействие со средой

Общедоступные объекты
~~~~~~~~~~~~~~~~~~~~~

*   ``AS`` - общее пространство имен
*   :js:class:`AS.FORMS` - проигрыватель, компоненты форм, утилиты
*   :js:class:`AS.SERVICES` - сервисы
*   :js:class:`AS.LOGGER` - логгер собщений и ошибок исполнения
*   :js:class:`AS.OPTIONS` - параметры приложения
.. *   ``AS.COMPONENTS`` - компоненты, которые могут быть использованы отдельно от проигрывателя форм

Особенности реализации
~~~~~~~~~~~~~~~~~~~~~~

В области видимости скрипта (добавленный как к компоненту,
так и пользовательскому компоненту) имеются следующие
переменные:

*   ``model`` - модель текущего компонента;
*   ``view`` - отображение текущего компонента;
*   ``editable`` - режим (просмотр / редактирование);
*   ``model.playerModel`` - модель проигрывателя;
*   ``view.playerView`` - отображение проигрывателя.

Скрипт (добавленный как к компоненту, так и пользовательскому
компоненту) выполняется каждый раз при смене режима
проигрывателя (просмотр - редактирование). При этом *модель*
компонента остается та же, а *отображение* компонента каждый
раз пересоздается. Поэтому при написании скриптов следует
учесть следующее: если добавляются или переписываются методы
модели, либо происходит подписывание на события другой модели,
то рекомендуется использовать следующее:

.. code-block:: js

    if (!model.inited) {
        //манипулирование моделями
        model.inited = true;
    }

**"Строгий режим" JavaScript:**

Начиная с версии Synergy 3.14, все пользовательские скрипты
выполняются с добавлением директивы ``use strict``. Эта директива
означает, что соответствующий ей код будет выполнятся в так
называемом **"строгом режиме"**, поддерживающем стандарт `JavaScript`
`ECMAScript5 <http://www.ecma-international.org/publications/standards/Ecma-262.htm>`_

.. warning:: Если код скрипта содержит конструкции, не соответствующие стандарту ES5, то они не будут выполняться. Это не является ошибкой Synergy.

Пользовательский компонент
~~~~~~~~~~~~~~~~~~~~~~~~~~



Справочник API
~~~~~~~~~~~~~~~~

.. toctree::
  :maxdepth: 2
  :numbered:

  forms/options
  forms/player
  forms/eventbus
  forms/cmp/index
  forms/services
  forms/utils
  forms/logger
