我有一个Flash应用程序,它可以创建一种幻灯片演示文稿。
所有'幻灯片'都存储在读取和处理的XML文件中。如何构建我的类以避免使用静态函数
我试图使用这个XML文件来构建演示文稿。
目前,我的主要类有它最初的功能main
和静态函数processXML
main
开始我database
类名为initdb的功能。我的问题之一是initDB放弃处理,因为它依赖于事件监听器。在加载XML文件完成后,事件侦听器启动我的main
上的静态函数以从此文件创建对象。
问题是因为事件监听器继续处理(在不确定的时间量之后),所以这些函数不再受main
类的控制。
通常情况下,在这种情况下,我会避免使用静态的,因为我从主功能通过使用处理returns
控制处理 - 即返回一个值拉控制权返回给调用者类的功能。
现在,所有这些都产生了敲门效应,我不能使用addChild调用,或者实际上任何类似的调用,因为函数是静态的。
如果你能腾出一些时间,我真的需要重新考虑我的文件的工作方式。
主类
public static var databaseXML:XML;
public var database:ContentDatabase = new ContentDatabase();
public function main()
{
database.initDB();
}
public static function processXML()
{
//Get First Slide
var introSlide:SlideLayout = new SlideLayout();
var allSlides:XMLList = main.databaseXML.children();
var introSlideXML:XML;
for each (var slide:XML in allSlides)
{
introSlideXML = slide;
break;
}
var theSlide:MovieClip = introSlide.createSlide(introSlideXML);
addChild(theSlide); //Fails, Obviously
}
ContentDatabase类
private var xmlLoader:URLLoader;
public function initDB()
{
xmlLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, onComplete, false, 0, true);
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);
xmlLoader.load(new URLRequest("resources/slides.xml"));
}
private function onComplete(e:Event):void
{
try
{
main.databaseXML = new XML(e.target.data);
xmlLoader.removeEventListener(Event.COMPLETE, onComplete);
xmlLoader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
main.processXML();
}
catch (err:Error)
{
trace('broke: ' + err.message);
}
}
private function onIOError(e:IOErrorEvent):void
{
trace('broke: ' + e.text);
}
我愿意我是如何构建这个项目让我这种沟通的所有想法。
理想情况下,我希望ContentDatabase
类只保留XML处理。
嗨帕特里克,谢谢你的帮助! –
等一下!另一个人是否因他不同意他而删除了他的答案? –
我真心希望这不是原因! – PatrickS