我正在创建一个定义“错误”状态的自定义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>
答案 0 :(得分:1)
在Flex 4中,只有在激活状态时才会实例化组件。因此,当皮肤首次加载时,errorIcon是一个空引用。它的实例化被推迟到错误状态变为活动状态。要立即实例化它,请在其上设置itemCreationPolicy =“immediate”属性。
<s:BitmapImage id="errorIcon"
source="../images/error.png"
itemCreationPolicy="immediate"
/>