ViewController - это “мозги” вашего вида. Вся логика, весь код, если хотите, хранятся здесь и только здесь. ViewController-ы управляют видом, который им принадлежит, именно они говорят ему, как он должен повести себя (но не как он должен выглядеть).
Для примера возьмём этот простой контроллер вида:
public class DummyApplicationViewController extends ViewController
{
outlet var myButton : Button;
outlet var defaultState : State;
outlet var anotherState : State;
public function DummyApplicationViewController()
{
}
override lifecycle function viewBeforeAddedToStage() : void
{
myButton.text = "Click me!";
}
event function myButtonTapped() : void
{
myButton.text = "Well done!";
view.currentState = anotherState.name;
}
}
Здесь мы можем заметить 3 концепции:
Давайте рассмотрим их по порядку.
Чтобы получить ссылку на наш аутлет в контроллере, мы должны объявить свойство контроллера с таким же именем и namespace-ом outlet. Примерно вот так:
public class DummyApplicationViewController extends ViewController
{
outlet var myButton : Button;
public function DummyApplicationViewController()
{
}
override lifecycle function viewBeforeAddedToStage() : void
{
myButton.text = "Click me!";
}
}
Просто, не правда ли?
Вы можете спросить, как так получилось, мы нигде не объявляли значение этой переменной, как контроллер узнал, что ей надо присвоить значение свойства myButton из View? Ответ кроется во внутренней реализации контроллера, который при создании View проходится по всем своим outlet-ам и запрашивает их у View. View обязательно должна предоставлять все запрашиваемые outlet-ы, иначе вы получите ошибку.
Вам не надо заботиться о том, что контроллер хранит ссылку на компонент вида, “связывание”, как и “отвязывание” outlet-ов происходит автоматически внутри фреймворка.
У каждой составляющей TF есть свой жизненный цикл (lifecycle), который однозначно определяет этапы его жизни.
Рассмотрим жизненный цикл ViewController-а:
В примере был использован метод viewBeforeAddedToStage таким образом:
public class DummyApplicationViewController extends ViewController
{
outlet var myButton : Button;
public function DummyApplicationViewController()
{
}
override lifecycle function viewBeforeAddedToStage() : void
{
myButton.text = "Click me!";
}
}
обратите внимание, что здесь мы спокойно устанавливаем свойства outlet-а, потому что мы знаем, что в этом этапе жизненного цикла это можно делать.
Из описания View мы уже поняли, что TF предоставляет удобный механизм EventMap-ов во View, но как нам обрабатывать эти события? Подписываться на них в контроллере? И ещё не забыть отписаться? Да ещё и думать, когда это всё делать? Нет! Всё это сделает за Вас фреймворк, а Вам останется лишь радоваться встроенной возможности удобного объявления подписчиков событий View.
Как объявить собственный слушатель событий View? Это очень просто! Достаточно создать функцию ViewController-а с namespace-ом event и именем по имени события, которое вы хотите получить. К примеру, вот так:
public class DummyApplicationViewController extends ViewController
{
outlet var myButton : Button;
public function DummyApplicationViewController()
{
}
event function myButtonTapped() : void
{
myButton.text = "Well done!";
}
}