将XML加载到mxml(Flex AS3)

时间:2013-06-08 02:01:41

标签: xml actionscript-3 flex

我正在尝试在textarea中显示xml文件的内容(使用Flex 4.7)。 但我收到错误,我不知道为什么。

这是我的代码:

<?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">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->         
    </fx:Declarations>
    <fx:Script>
        <![CDATA[

            var xmlLoader:URLLoader = new URLLoader();
            xmlLoader.addEventListener(Event.COMPLETE, loadXML); // 1st error here
            xmlLoader.load(new URLRequest("books.xml")); // 2nd error here

            var xmlData:XML = new XML();

            function loadXML(e:Event):void{             
                xmlData = new XML (e.target.data);              
            }               
        ]]>
    </fx:Script>

    <s:VGroup>      
        <s:TextArea id="txtArea">       
        </s:TextArea>               
    </s:VGroup>

</s:WindowedApplication>

以下是我的错误:

  

此行的多个市场:

     

-1120:访问未定义的propertyloadXML(第一个错误)

     

-1120:访问未定义的属性xmlLoader(第二个错误)

这是应用程序结构:

  

测试

     

- src

     

- (默认包)

     

--- Tester.mxml

     

- books.xml

     

- Tester-app.xml

我不确定我做错了什么。有谁能请我走上正轨?

谢谢!

1 个答案:

答案 0 :(得分:2)

您的大多数ActionScript代码都必须放在方法中;并且您必须将代码放入方法中。变量定义没问题。导入语句没问题。我认为一些指令,例如include是可以的。但是,其他代码必须在方法中。

这是带注释的代码:

<fx:Script>
    <![CDATA[

        // this is a variable definition so it is good
        var xmlLoader:URLLoader = new URLLoader();

        // these two lines are code that executes; so they must be put inside a method; something you did not do.  Comment them out 
        //xmlLoader.addEventListener(Event.COMPLETE, loadXML); // 1st error here
        //xmlLoader.load(new URLRequest("books.xml")); // 2nd error here

        // this is a variable definition so it is okay
        var xmlData:XML = new XML();

        // this is a function definition so it is okay
        function loadXML(e:Event):void{             
            xmlData = new XML (e.target.data);              
        }               

        // move your executing code into a method
        public function load():void{
         xmlLoader.addEventListener(Event.COMPLETE, loadXML);
         xmlLoader.load(new URLRequest("books.xml"));
        }
    ]]>
</fx:Script>

我打赌会删除你的错误。但是,您还需要/需要执行某些操作来执行该加载方法。执行此操作时,取决于数据在应用程序和当前组件中的使用方式。但是,我可能会添加一个preinitialize事件监听器:

<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" 
                       preinitialize="load()">

如果预初始化不起作用;我将代码移动到initialize事件。如果这不起作用;我要去创建完成事件。