我有一个用Lectora构建的课程,我正在尝试创建一种有效的方法来存储课程每个页面的成绩单。每当课程中的页面加载时,flash命令就会被引导到swf文件以及唯一的pageID。并返回一个字符串(包含适当的记录)。
以下是我的xml文件transcripts.xml
的简短版本:
<?xml version="1.0" encoding="utf-8"?>
<transcripts>
<transcriptText pageID="c1p1">Transcript 1 text</transcriptText>
<transcriptText pageID="c1p2">Transcript 2 text</transcriptText>
<transcriptText pageID="c1p3">Transcript 3 text</transcriptText>
<transcriptText pageID="c1p4">Transcript 4 text</transcriptText>
</transcripts>
我正在使用以下XmlLoader.as文件(我在交换机上找到,谢谢)加载xml。
package {
import flash.events.*;
import flash.net.*;
public class XmlLoader extends EventDispatcher {
private var _xml:XML;
public function XmlLoader(xmlPath:String){
var xmlUrlRequest:URLRequest = new URLRequest(xmlPath);
var xmlUrlLoader:URLLoader = new URLLoader(xmlUrlRequest);
xmlUrlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
}
private function xmlLoaded(e:Event):void{
e.currentTarget.removeEventListener(Event.COMPLETE, xmlLoaded);
_xml = new XML(e.currentTarget.data);
dispatchEvent(new Event(Event.COMPLETE));
}
public function getXml():XML{
return this._xml;
}
}
}
以下是我在flash文件第一帧上的代码。
var myXML:XML;
var menuXmlList:XmlLoader = new XmlLoader("transcripts.xml");
menuXmlList.addEventListener(Event.COMPLETE, processXML);
function processXML(e: Event):void
{
myXML = (e.currentTarget.getXml());
}
// this function is called as a Flash Command from within
// the course each time a new page loads. pageID is the unique
// identifier for that particular page.
function getTranscript(pageID: String):String
{
var pageNumber: String = pageID;
var transcript: String = myXML.transcriptText.(@pageID == pageNumber);
return (transcript);
}
ExternalInterface.addCallback("getTranscript", getTranscript);
我在过去几天对此进行了一些研究,并了解了一些正在发生的事情。异步代码的本质意味着当调用myXML
时,xml数据没有进入getTranscripts()
,因此尝试访问myXML
会产生null和null引用警告。
我认为我需要将xml数据保存在类文件中,直到getTranscripts
需要它为止。但我不知道该如何解决这个问题。我已经尝试在XmlLoader.as
文件中编写其他功能,但没有取得任何成功。
有人能说出我是否走在正确的轨道上吗?在XmlLoader.as
文件中创建方法的正确方法是getTranscripts()
可以调用以返回此值:myXML.transcriptText.(@pageID == pageNumber)
pageNumber(作为唯一标识符)?
非常感谢任何想法或代码示例。
问候