Базовые
-------

Модель поведения и отображения каждого компонента определяеются описанием, которое содержится в форме

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

*Базовое описание компонента выглядит следующим образом*

.. code-block:: js

    {
        "id": "person",                       // идентификатор компонента
        "type": "type",                       // тип компонента
        "style": {                            // стиль компонента
            "align": "center",
            "font": "Courier New",
            "fontsize": "12",
            "bold": true,
            "italic": false,
            "underline": false,
            "strike": false,
            "height": "20",
            "width": "200"
        },
        "config": {                           // конфигурация компонента
            "read-only": true,                // заблокировать от изменений пользователем
            "script": "model.setValue('1');"  // скрипт компонента
        },
        "required": true,                     // обязательное поле
        "data": {                             // дефолтные данные компонента
            "id": "person",
            "type": "type",
            "value": "Дефолтное значение"
        }
    }

------------------------------------------------------------------------------

.. js:class:: AS.FORMS.Model

    Базовая модель для всех компонентов

    **Типы событий**

    каждый компонент может добавлять свои специфичные типы событий

        *valueChange* - событие изменения значения компонента, функция обратного вызова принимает следующие параметры
             Object event:                          возникшее событие

             :js:class:`AS.FORMS.Model` model:      модель

        *markInvalid* - пометить значение компонента как не валидное, функция обратного вызова принимает следующие параметры
             Object event:                          возникшее событие

             :js:class:`AS.FORMS.Model` model:      модель

        *unmarkInvalid* - пометить значение компонента как валидное, функция обратного вызова принимает следующие параметры
             Object event:                          возникшее событие

             :js:class:`AS.FORMS.Model` model:      модель

        *modelDestroyed* - событие уничтожения модели компонента, функция обратного вызова принимает следующие параметры
             Object event:                          возникшее событие

    .. js:function:: trigger(eventType[, args])

            Инициировать событие

            :param String eventType:  тип события
            :param Array args:        аргументы, которые будут переданы в callback


    .. js:function:: on(eventType, callback)

        подписаться на событие

        :param String eventType:        тип события
        :param Function callback:     функция обратного вызова (количество принимаемых аргументов засивит от события)



    .. js:function:: off(eventType, callback)

        отписаться от события

        :param String eventType:        тип события
        :param Function callback:     функция обратного вызова


    .. js:data:: asfProperty

        Определение компонента из описания формы

    .. js:data:: playerModel

        Модель проигрывателя

    .. js:function:: fireChangeEvents()

        Вызов событий изменения значения формы

    .. js:function:: isEmpty()

        :returns: true: Значение компонента не задано

                  false: Значение компонента задано

    .. js:function:: setValue(newValue)

        Вставить новое значение и отправить уведомление всем подписанным объектам, в т.ч. отображению

        :param Object newValue: Значение компонента  (Тип ринимаемого значения зафимит от компонента)

    .. js:function:: getErrors()

        Получение ошибок заполнения поля согласно настройкам ``asfProperty``

        Если компоненту необходимо возвращать свои специфические ошибки, то реализуйте в модели
        компонента метод ``getSpecialErrors``. Метод должен возвращать список
        специфических ошибок в том же формате, что и данный метод

        :returns: ``[object]`` Если массив пустой, значит ошибки отсутствуют,
                  иначе - его элементы имеют поля:

                  * ``errorCode`` - код ошибки;
                  * ``id`` - идентификатор компонента.

                  Возможные коды ошибок:

                  * ``emptyValue``
                  * ``wrongValue``
                  * ``deletedValue``
                  * ``valueTooHigh``
                  * ``valueTooSmall``

                  Для одного и того же компонента может быть как несколько ошибок, так может и не быть ни одной.

    .. js:function:: getLocale()

        Получение локали, настроенной в компоненте

        :returns: ``String`` Локаль компонента или :js:data:`AS.FORMS.OPTIONS`.locale

    .. js:function:: getHTMLValue()

        :returns: ``String`` HTML-представлениe текстового значения поля со стилями

    .. js:function:: getValue()

        :returns: ``String`` значение компонента  (тип возвращаемого значения зависит от типа компонента)

    .. js:function:: getTextValue()

        :returns: ``String`` текстовое значение компонента

    .. js:function:: getAsfData([blockNumber])

        :param Number blockNumber: Номер строки динамической таблицы (если это компонент статической таблицы, то передавать эту переменную не нужно)
        :returns: ``asfData`` Данные компонента

    .. js:function:: setAsfData(asfData)

        Вставить значение `asfData`

        :param asfData asfData: Данные компонента




------------------------------------------------------------------------------

.. js:class:: AS.FORMS.View

    Базовое отображение всех компонентов.

    .. js:data:: model

        Модель. Наследует AS.FORMS.Model

    .. js:data:: container

        Контейнер, в котором будет отрисовываться отображение

    .. js:data:: input

        Поле ввода для некоторых компонентов:

            * текстовое поле
            * числовое поле
            * многострочный текст

    .. js:data:: playerView

        Отображение проигрывателя

    .. js:function:: unmarkInvalid()

        Убрать пометку неправильно заполненного поля

    .. js:function:: markInvalid()

        Пометить поле как неправильно заполненное

    .. js:function:: checkValid()

        Проверить корректность текущего значения (если поле заполнено неверно, то вызовется метод markInvalid)

    .. js:function:: setEnabled(enabled)

        Сделать доступным или недоступным для редактирования

        :param boolean enabled: true/false

    .. js:function:: setVisible(visible)

        Сделать видимым или невидимым

        :param boolean visible: true/false

    .. js:function:: updateValueFromModel()

        Обновить отображение согласно значению модели