0

我正在尝试在 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(第二个错误)

这是应用程序结构:

测试仪

- 源代码

--(默认包)

--- 测试者.mxml

-- 书籍.xml

-- 测试应用程序.xml

我不确定我做错了什么。谁能让我走上正确的轨道?

谢谢!

4

1 回答 1

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>

我敢打赌,这消除了你的错误。但是,您还需要/需要做一些事情来执行该加载方法。何时执行此操作取决于数据在您的应用程序和当前组件中的使用方式。但是,我可能会添加一个预初始化事件侦听器:

<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()">

如果预初始化不起作用;我会将代码移至初始化事件。如果这不起作用;我会参加creationComplete 活动。

于 2013-06-08T02:46:28.343 回答