我正在尝试在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
我不确定我做错了什么。有谁能请我走上正轨?
谢谢!
答案 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事件。如果这不起作用;我要去创建完成事件。