2013-04-24 19 views
0

当我在整个应用程序中转到不同的状态时,我正在使用状态来显示不同类型的介质。我正在处理图像状态,我可以从我的XML中获取数据,以显示在我已经布置的数据网格中,并显示当我单击它时查看的图像的名称,但图像不显示。这是我现在的代码:无法从AS3中的状态加载外部XML中的图像

<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
    <fx:XML id="images" source="img_data/images.xml" /> 
    <s:XMLListCollection id="imageCollection" source="{images.IMAGE}" /> 
</fx:Declarations> 
<s:HGroup> 
    <s:DataGrid id="imageGrid" dataProvider="{imageCollection}" click="onClick()" /> 

    <s:VGroup height="55"> 
     <s:Label text="Now viewing: {[email protected]}" /> 
     <s:Label id="txtPosition" width="91"/> 
    </s:VGroup> 

</s:HGroup> 
<fx:Script> 
    <![CDATA[ 
     import mx.controls.Image; 

     public var newImage:Image; 
     public var myXML:XML; 
     [Bindable]public var myURLLoader:URLLoader = new URLLoader; 



     public function onClick():void{ 
      newImage = new Image(); 
      newImage.load(new URLRequest(imageGrid.selectedItem.file.toString())); 
      newImage.addEventListener(Event.COMPLETE, processXML); 

      newImage.source = [email protected]; 
     } 

     public function processXML(e:Event):void{ 
      myXML = new XML(e.target.data); 
       //newImage = new Image(); 

       newImage.height = 200; 
       newImage.width = 400; 
       imgGroup.addElement(newImage); 

     } 


    ]]> 
</fx:Script> 

我的XML文件,我从拉:

<?xml version="1.0" encoding="utf-8"?> 
<GALLERY COLUMNS="5" XPOSITION="30" YPOSITION="30" WIDTH="100" HEIGHT="100"> 
<IMAGE name="Cabin in the Woods" > 
<file>img_data/cabin.jpg </file> 
</IMAGE> 
<IMAGE name="Batman" src="img_data/batman.jpg" > 
<file>img_data/batman.jpg</file> 
</IMAGE> 
<IMAGE name="Christmas Vacation"> 
<file>img_data/christmasVacation.jpg</file> 
</IMAGE> 
<IMAGE name="Inception"> 
<file>img_data/inception.jpg</file> 
</IMAGE> 
</GALLERY> 

回答

0

首先,你应该有一个的URLLoader,不是一个图像加载XML。

public function onClick():void{ 
     myURLLoader.load(new URLRequest(imageGrid.selectedItem.file.toString())); 
     myURLLoader.addEventListener(Event.COMPLETE, processXML); 
    } 

在从XML中实际读取图像之前,不应设置图像的来源。

public function processXML(e:Event):void{ 
     myXML = new XML(e.target.data); 
     newImage = new Image(); 
     newImage.source = myXML.IMAGE[0].file.text(); 
     imgGroup.addElement(newImage); 
    } 

我把任意一个[0],因为我不知道你想从你的XML加载哪个图像。