需要访问xml数据但不确定在哪里构建函数

时间:2016-10-31 03:02:59

标签: xml actionscript-3 flash

我有一个用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(作为唯一标识符)?

非常感谢任何想法或代码示例。

问候

0 个答案:

没有答案