Инициализируйте свойства пользовательского компонента перед созданием дочерних в flex - PullRequest
0 голосов
/ 16 апреля 2010

Скажем, у меня есть следующий пользовательский компонент:

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
    <![CDATA[
        [Bindable]
        public var prop:String;

        private function formatProp() : String {
            return "Hello, " + prop;
        }

    ]]>
    </fx:Script>

    <s:Label text="User: {prop}"/>
    <s:Label text="Greeting: {formatProp()}"/>
</s:Group>

Если я добавлю его в свое приложение так:

<local:MyComponent prop="Hello"/>

Результат выглядит так:

User: Mark
Greeting: Hello, null

Кажется, что Flex устанавливает prop в моем пользовательском компоненте после того, как он уже инициализировал дочерние метки, поэтому он устанавливает событие измененного свойства для установки метки пользователя.

Существует ли элегантный способ заставить Flex ждать установки всех свойств моего компонента перед первоначальной оценкой привязок?

Примечание. Я понимаю, что функция formatProp тривиальна и может быть встроена, но это всего лишь упрощенный пример.

Ответы [ 2 ]

1 голос
/ 22 июня 2010

«Элегантным способом» было бы на самом деле обеспечить привязку данных, чтобы впоследствии вы могли изменить свою собственность. Ваша первоначальная идея выглядела хорошо, работая с ответом Корнеля. Я просто хотел упомянуть об этом, поскольку ваш реальный вопрос звучал так, будто вы знаете, что привязка данных не работает, и вы просто хотели отложить начальную настройку переменной.

Кстати, если вы планируете создавать пользовательские компоненты в Actionscript (вместо mxml), вы столкнетесь с противоположной проблемой: свойства устанавливаются до того, как у вас появится возможность создать своих детей, поэтому вам может потребоваться их буферизация, если на самом деле должно влиять на некоторые свойства ребенка.

0 голосов
/ 16 апреля 2010

это не связано с жизненным циклом компонента, а скорее с правилами привязки. Ваша функция «formatProp» должна получить параметр «prop» в качестве параметра для вызова при изменении свойства. Попробуйте этот код:

        private function formatProp(props:String) : String {
            return "Hello, " + props;
        }
        <s:Label text="Greeting: {formatProp(prop)}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...