0

我正在创建一个自定义 TextInput 组件,它将定义一个“错误”状态。如果 errorString 属性的长度大于 0,我扩展了 TextInput 类以将状态更改为“错误”。在皮肤类中,我定义了一个“错误”状态,并添加了一些逻辑来检测错误图标。但是,如果我在使用位图图像标记中的“includeIn”属性的同时拥有此代码,则会收到设计视图错误。如果我要么 A) 只包含没有设置“includeIn”属性的代码,它就可以工作,或者 B) 不包含设置图标大小和位置的代码,只使用“includeIn”属性,它就可以工作。当我同时使用“includeIn”时,任何可能导致设计视图问题的想法

文本输入类:

        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();
            }

        }
     }

文本输入皮肤文件:

            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>
4

1 回答 1

1

在 Flex 4 中,组件仅在其所处状态被激活时才会被实例化。因此,当皮肤第一次加载时,errorIcon 是一个空引用。它的实例化被推迟到错误状态变为活动状态。为了立即实例化它,您在其上设置 itemCreationPolicy="immediate" 属性。

<s:BitmapImage id="errorIcon" 
               source="../images/error.png" 
               itemCreationPolicy="immediate" 
/>
于 2010-04-26T23:31:59.183 回答