Свойство «FlashInder» Flash Builder 4, приводящее к ошибке представления дизайна - PullRequest
0 голосов
/ 26 апреля 2010

Я создаю пользовательский компонент TextInput, который будет определять состояние «ошибка». Я расширил класс TextInput, чтобы изменить состояние на «error», если длина свойства errorString больше 0. В классе скина я определил состояние «error» и добавил некоторую логику для определения размера и положения объекта. Значок ошибки. Однако, если у меня есть этот код в то же время, я использую свойство «includeIn» в теге растрового изображения, я получаю ошибку представления дизайна. Если я либо А) только включаю этот код без установленного свойства "includeIn", это работает, либо Б) не включает код для установки размера и положения иконки и использует только свойство "includeIn", это работает. Есть идеи, что может вызывать проблему с представлением дизайна, когда я одновременно использую свойство "includeIn" и код размера / позиции значка?

Класс TextInput:

        package classes {

        import spark.components.TextInput;

        public class TextInput extends spark.components.TextInput {

            [SkinState("error")];

            public function TextInput() {
                super();    
            }

            override public function set errorString( value:String ):void {
                super.errorString = value;
                invalidateSkinState();
            }

            override protected function getCurrentSkinState():String {

                if (errorString.length>0) {
                    return "error";
                }

                return super.getCurrentSkinState();
            }

        }
     }

Текстовый файл TextInput:

            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
            {
                //THIS IS THE CODE THAT SEEMS TO BE CAUSING THE PROBLEM


                if(getStyle("iconSize") == "large") {
                    errorIcon.right = -12;
                    errorIcon.source = new errorIconLg();
                } else {
                    errorIcon.right = -5;
                    errorIcon.source = new errorIconSm();
                }


                super.updateDisplayList(unscaledWidth, unscaledHeight);
            }
        </fx:Script>

        <s:states>
            <s:State name="normal"/>
            <s:State name="disabled"/>
            <s:State name="error"/>
        </s:states>



        //If I remove the problem code above or if I take out the includeIn 
        //property here, it works

        <s:BitmapImage id="errorIcon" verticalCenter="0" includeIn="error" />


    </s:SparkSkin>

1 Ответ

1 голос
/ 27 апреля 2010

В Flex 4 компонент создается только при активированном состоянии. Поэтому при первой загрузке скина errorIcon является пустой ссылкой. Его создание отложено до тех пор, пока состояние ошибки не станет активным. Чтобы немедленно создать его экземпляр, вы устанавливаете для него свойство itemCreationPolicy = "немедленный".

<s:BitmapImage id="errorIcon" 
               source="../images/error.png" 
               itemCreationPolicy="immediate" 
/>
...