Flex 3: сбой назначения данных подкомпоненту в компоненте MXML в блоке сценария действия - PullRequest
0 голосов
/ 27 августа 2009

Я пытаюсь передать назначение параметру данных подкомпонента через установщик его родительского компонента. Как это:

<CustomComponent
     xmlns:mx="http://www.adobe.com/2006/mxml"
     xmlns="components.*"
    >
    <mx:Script>
        <![CDATA[
            public override function set data(val:Object):void
            {
                super.data = val;

                subComponent.data = val; //ref #1
            }
        ]]>
    </mx:Script>
    <CustomSubComponent id="subComponent"
        />
</CustomComponent>

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

Я что-то делаю глупо? Это кажется довольно простым.

Среда: используется Flex SDK 3.2 с плагином Flex Builder 3 для Eclipse в Windows и Flash 9 Debug ver. для IE7.

Примечание. В этом конкретном примере я стараюсь избегать привязки. Я имею в виду, почему я не могу вручную передать данные в подкомпонент, а не связать их?

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Flex подавляет ошибки в установщиках данных, потому что содержимое часто равно нулю. Возможно, проблема в том, что ваш субкомпонент не инициализируется при вызове набора данных. Если вы действительно не можете использовать привязку (простой и понятный способ), то вам следует отложить установку данных подкомпонента до тех пор, пока они не будут инициализированы с помощью invalidateProperties / commitProperties.

В установщике данных вызовите invalidateProperties () и установите флаг, сообщая, что они изменились.

Переопределите commitProperties (не забудьте вызвать super), проверьте флаг и, если это правда, установите данные подкомпонента.

Если ваш блок commitProperties никогда не вызывается, попробуйте invalidateProperties при creationComplete.

0 голосов
/ 27 августа 2009

На каких компонентах основан ваш пользовательский компонент и подкомпонент? Что они расширяют?

Я попробовал базовый пример расширения HBox и VBox, и все прошло нормально.

Вы можете увидеть результат здесь , просмотр источника включен.

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

Надеюсь, это поможет

...