2012-09-08 59 views
0

請幫讀取XML數據返回到Flex組件

我可以從三個部分,XML保存數據,它的工作原理,但現在我的代碼掙扎時,用戶讀取數據返回到組件打開。這是由用戶創建的本地文件。我需要打開事件處理程序的幫助。

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         width="734" height="389" 
         creationComplete="init();"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 

    </fx:Declarations> 


    <fx:Script> 
     <![CDATA[ 

     [Bindable] 
     public var xmlData:XML=<ROOTS></ROOTS>; 

     private function fnAddItem():void 
     { 
     var fr:FileReference = new FileReference(); 

     var ba:ByteArray = new ByteArray(); 
     var newXmlRow:XML=<ROOTS> 
     <TXT>{txt1.text}</TXT> 
     <TXTA>{txt2.text}</TXTA> 
     <DTF>{txt3.text}</DTF> 
     </ROOTS>; 
     ba.writeMultiByte(newXmlRow, 'utf-8'); 
     fr.save(ba); 
     } 


      protected function oped_clickHandler(event:MouseEvent):void 
      { 
       var fr:FileReference = new FileReference(); 
       var ba:ByteArray = new ByteArray(); 
       var newXmlRow:XML=<ROOTS> 
         <TXT>{txt1.text}</TXT> 
         <TXTA>{txt2.text}</TXTA> 
         <DTF>{txt3.text}</DTF> 
         </ROOTS>; 
       ba.readMultiByte(xmlData, 'utf-8'); 
       fr.load(ba); 

      } 


     ]]> 
    </fx:Script> 
    <s:Label x="108" y="80" text="Name"/> 
    <s:Label x="91" y="222" text="Remarks"/> 
    <s:Label x="108" y="116" text="text"/> 
    <s:TextInput id="txt1" x="167" y="78"/> 
    <s:TextArea id="txt2" x="167" y="218" height="86"/> 
    <s:TextArea id="txt3" x="167" y="108" height="77"/> 

    <s:Button x="53" y="242" label="save" width="90" click="fnAddItem()"/> 
    <s:Button id="oped" x="73" y="271" label="open" click="oped_clickHandler(event)"/> 

</s:WindowedApplication> 

回答

0

首先,如果您想要一個對話框,您必須等待用戶進行選擇。選擇會拋出一個您可以捕獲的事件。在處理程序中,您可以執行文件處理。嘗試下面的代碼是否適合你。

private var openedFile:File; 

    private function oped_clickHandler(event:MouseEvent):void { 
     openedFile = new File(); 
     openedFile.addEventListener(Event.SELECT, file_select); 
     openedFile.browseForOpen("Please select a file..."); 
    } 

    private function file_select(event:Event):void { 
     if(openedFile != null && openedFile.exists){ 
      var fileStream:FileStream = new FileStream(); 
      fileStream.open(openedFile, FileMode.READ); 
      var readXML:XML = XML(fileStream.readUTFBytes(fileStream.bytesAvailable)); 
      fileStream.close(); 
      trace(readXML.toString()); 
      txt1.text = readXML.TXT; 
      txt2.text = readXML.TXTA; 
      txt3.text = readXML.DTF; 
     } 
     trace(event); 
    } 

歡呼聲, 搶

+0

嗨,羅布,感謝這麼多這一點。我在這個問題上花了好幾天時間,並且給了班級和模型,並且各種各樣的方式來解決這個問題。我知道有一個簡單的方法,而且這個工作完全像我想要的那樣。謝謝。有沒有一種方法可以幫助你,你不知道我現在有多開心! –