我在flex-easy程序中有这个源,它在两个状态之间切换。第二个状态是show myImage component
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:components="components.*">
<fx:Script>
<![CDATA[
protected function button1_clickHandler(event:MouseEvent):void
{
if (currentState == "state1")
currentState = "state2";
else
currentState = "state1";
}
]]>
</fx:Script>
<s:states>
<s:State name="state1" />
<s:State name="state2" />
</s:states>
<components:myImage includeIn="state2"/>
<s:Button label="switch states" click="button1_clickHandler(event)" />
</s:Application>
组件myImage在这里:
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" >
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function img_creationCompleteHandler(event:FlexEvent):void
{
trace("image width " + img.width);
}
]]>
</fx:Script>
<mx:Image id="img" source="obr.jpg" creationComplete="img_creationCompleteHandler(event)"/>
</s:Group>
如果与myImage.mxml相同的代码放到主应用程序然后跟踪打印正确的值..但是现在当我点击按钮并切换到state2然后跟踪打印宽度为0 ..为什么?之后的事件是在state2加载的图像,我可以使用image.width属性??
感谢您的帮助
答案 0 :(得分:1)
它没有宽度的原因是因为您的图像尚未加载。它仍然需要从您的服务器获取图像才能工作。你可以做两件事。您可以嵌入图片,以便在creationComplete
图片已经存在(要嵌入,只为源@Embed('image.jpg')
执行),或等待使用complete
事件加载图片,但是,你的容器(Image)会马上调整大小并不是100%。您可以尝试为跟踪执行callLater
。尝试调试并检查图像上的contentWidth
属性,这可能是一个更好的属性,因为它与图像本身有关,而不是容器。
答案 1 :(得分:0)
尝试按以下方式将itemCreationPolicy="immediate"
添加到图像中:
<components:myImage includeIn="state2" itemCreationPolicy="immediate" />