Понятие View
==========================
View - абстракция представления
--------------------------------------
В терминах TrylogicFramework-а, View является единицей отображения. Так что же представляет из себя View на самом деле? Давайте посмотрим:
|
|
.. image:: _static/ViewDescription.png
:align: center
|
|
|
|
Для примера возьмём этот простой вид (для описания View так же используется MXML, хотя вы и можете делать это в Pure AS коде):
|
.. code-block:: mxml
ru.trylogic.dummy.views.dummyApplicationView.DummyApplicationViewController
|
**Самое важное** - это указать свойство ``controllerClass`` у View, ведь иначе TF не узнает, какой контроллер должен управлять этим видом, и будет использовать стандартный ViewController. Контроллер вида задаётся явно в виде класса. У одного вида может быть только один контроллер, и наоборот.
|
Связь с View его контроллер осуществляет с помощью трёх доступных методов:
#. Outlet-ы (в данном примере Button является Outlet-ом с идентификатором ``myButton`` )
#. Посредством наблюдения за Event-ами, которые вид диспатчит (в примере вид задиспачит событие с идентификатором ``myButtonTapped`` при возникновении события ``tap`` на кнопке ``myButton``)
#. States (Состояния) (в нашем View объявленно два состояния с именами ``default`` и ``another`` )
Давайте рассмотрим эти методы более детально.
|
Outlets
~~~~~~~~~~~~~~~~~~~~~~
Понятие аутлетов было взято создателями TF из мира iOS. Они позволяют связать определённую составляющую вида с свойством контроллера. На самом деле, со стороны View аутлеты есть не что иное, как обычные свойства. Но так же есть возможность использовать специальный тег ``Outlet``, позволяющий мапить аутлеты с помощью биндинга:
.. code-block:: mxml
|
EventMaps
~~~~~~~~~~~~~~~~~~~~~~
Карты событий (EventMaps) - это механизм, дающий возможность проксировать одно событие, возникающее на ``source`` с типом ``type``, на другое событие, которое будет задиспатчено относительно View.
Рассмотрим данный выше пример EventMap-а:
.. code-block:: mxml
Это - самый примитивный, но чаще всего используемый вариант. Когда у объекта ``myButton`` произойдёт событие ``tap``, то View задиспатчит событие ``myButtonTapped`` и контроллер (либо другой View) сможет об этом узнать.
|
States
~~~~~~~~~~~~~~~~~~~~~~
States (состояния) - это очень удобный концепт, позволяющий Вам менять параметры View в зависимости от его текущего состояния. В TF используется модель States от Flex 4 (важно понимать, что TF не наследуется от Flex-а и не тянет за собой ничего лишнего).
Пример объявленных состояний:
.. code-block:: mxml
... и их использования
.. code-block:: mxml
Обратите внимание на то, как объявленно свойство ``y`` у кнопки ``myButton``. Запись ``y.another`` означает "значение ``y`` в состоянии ``another``". Когда у свойства не указано состояние, то это означает, что значение будет использовано всегда, когда не указано другое для другого состояния.
Face - абстракция отображения
--------------------------------------
Face - это лицо Вашего вида. Вот представьте, у Вас есть лицо. Есть его описание (2 глаза, нос, рот, уши, если брать стандартный комплект:)) - это View. А есть то, как они выглядят - нос, к примеру, картошкой, а глаза - карие. Так и Face у View отвечает за его отображение в зависимости от заданных параметров.
Важный момент тут в том, что Ваше лицо может быть представлено не только в виде кожи, но и, например, в виде рисунка. При этом описание Вашего лица не меняется, а меняется лишь способ отображения. Так и в TF, Вы можете не меняя описания Вашей View менять способ отображения, к примеру, с нативного DisplayList-а на Starling, и наоборот. Если компоненты, которые Вы используете, написаны правильно, то Вы не заметите никакой визуальной разницы, метод отрисовки будет скрыт от Ваших глаз.
У каждой View есть функция
.. code-block:: as3
function get face() : IDisplayObject;
объявленная в интерфейсе tl.view.IView, которая вернёт ***платформозависимый*** объект отображения для **текущей** системы отрисовки.