Подтвердить что ты не робот

Как работает привязка в ActionScript?

Насколько я понимаю, привязка к var в ActionScript выполняется через события, которые автоматически запускаются при изменении var. У меня есть несколько вопросов по этому поводу:

  • Что произойдет, если класс явно не расширяет EventDispatcher? Существует ли какая-то магия в компиляторе, которая по существу делает класс EventDispatcher?
  • Как работает привязка к статическим варам? Является ли какая-то неявная статическая функция addEventListener(), добавленная в класс?
  • Я заметил, что вы можете поставить [Bindable] на статические vars, но не статические функции, почему это?

Edit:

Спасибо Кристофу Герреману за его освещающий ответ. Тем не менее, у меня есть несколько последующих вопросов из моих вопросов выше. Интересно, может ли кто-нибудь заполнить пробелы для меня (я пытался указать эти вопросы 4, 5, 6, но они почему-то появляются по 1, 2, 3!)

  1. Я добавил параметр -keep в компилятор и посмотрел на сгенерированный код привязки. Может ли кто-нибудь объяснить, как этот код применяется? Кажется, что компилятор создает класс BindableProperty для каждого класса, который содержит getter и setter. Как это складывается в класс, который я написал? Эта функция выглядит как частичные классы в С# - это эксклюзивная функция компилятора за кадром или я могу использовать ее самостоятельно?

  2. Класс BindableProperty по-прежнему явно не реализует EventDispatcher, как генерируемый класс реализует диспетчеризацию событий?

  3. В вопросе 3 я спросил о привязке к статическим функциям, но на самом деле я имел в виду статические функции getter и setter. Это, похоже, не разрешено.

4b9b3361

Ответ 1

привязки действительно работают через диспетчеризацию событий. Вы можете многому научиться из созданного кода ActionScript, добавив флаг -keep в настройки компилятора.

Я постараюсь ответить на ваши вопросы.

  • компилятор подберет тег метаданных [Bindable] и создаст геттер и сеттер для каждого свойства, которое вы отметили как связываемое. Получатель просто вернет значение свойства. Установщик проверяет, отличается ли новое значение от исходного значения и отправит событие PropertyChange, если это произойдет.

  • то же самое, что, например, свойства свойства, только теперь создается статический getter и setter. Кроме того, создается mx.binding.StaticPropertyWatcher для просмотра изменений в статических свойствах.

  • При привязке к статическому методу вы получаете следующее предупреждение: "[Bindable] требует параметра имени события при применении к функции, которая не является получателем или сеттер". Описание в значительной степени говорит все. Поскольку у вас нет события "propertyChange", которое запускается специально для этого метода, вам нужно отправить свой заказ самостоятельно. Это [Bindable (event = "customEvent" )], а затем отправляет это событие откуда-то из вашего класса.