Flash Builder 4“includeIn”属性导致设计视图错误

时间:2010-04-26 17:35:02

标签: flex flex4 flash-builder states

我正在创建一个定义“错误”状态的自定义TextInput组件。我已经扩展了TextInput类,如果errorString属性的长度大于0,则将状态更改为“error”。在skin类中,我定义了一个“错误”状态,并添加了一些逻辑来检测其大小和位置。错误图标。但是,如果我同时使用此代码我在位图图像标记中使用“includeIn”属性,则会出现设计视图错误。如果我要么A)只包括没有“includeIn”属性集的代码,它可以工作或B)不包括设置图标大小和位置的代码,只使用“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 个答案:

答案 0 :(得分:1)

在Flex 4中,只有在激活状态时才会实例化组件。因此,当皮肤首次加载时,errorIcon是一个空引用。它的实例化被推迟到错误状态变为活动状态。要立即实例化它,请在其上设置itemCreationPolicy =“immediate”属性。

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