Почему mxml не поддерживает конструкторы компонентов? - PullRequest
7 голосов
/ 22 сентября 2011

Почему язык mxml платформы Flex не поддерживает конструктор для компонентов и не принимает аргументы конструктора для компонентов? Насколько я знаю, невозможно объявить объект ActionScript в mxml, если он принимает аргументы конструктора. Мне любопытно, почему. Это выбор дизайна Adobe или связанный с тем, как работают декларативные языки? Например, почему бы не разрешить:

<myNameSpace:MyComponent constructor="{argArray}"/> 

Ответы [ 2 ]

6 голосов
/ 28 сентября 2011

Вы можете прочитать IMXMLObject справочный API для получения дополнительной информации по вашему вопросу.Они не говорят точно, почему mxml не поддерживает конструкторы, но он говорит, что вы должны контролировать свой компонент mxml через события его жизненного цикла: preinitialize, initialize и creationComplete.

Полагаю, это дизайнерское решение, учитывая, что mxml транслируется непосредственно в код AS3 (вы можете скомпилировать ваше приложение, добавив keep-generate-actionscript = true, и посмотреть, что оно выдает).

4 голосов
/ 01 октября 2013

Даже если класс определен в MXML, можно реализовать конструктор путем создания экземпляра переменной экземпляра следующим образом.Он будет вызван до того, как будут отправлены различные события, такие как «preinitialize» или «creationComplete».

<myNameSpace:MyComponent>
  <fx:Script>
  <![CDATA[
     private var ignored:* = myInstanceConstructor();

     private function myInstanceConstructor():* {
         // Do something - called once per instance
         return null;
     }
  ]]>
  </fx:Script>
</myNameSpace:MyComponent>

Более того, переменные класса могут быть инициализированы аналогичным образом следующим образом.

<myNameSpace:MyComponent>
  <fx:Script>
  <![CDATA[
     private static var ignored:* = myClassConstructor();

     private static function myClassConstructor():* {
         // Do something - called once per class
         return null;
     }
  ]]>
  </fx:Script>
</myNameSpace:MyComponent>
...