2012-03-30 52 views
0

我试图从我们制作的Flash影片中填充的XML feed中填充一些数据。这个的主要操作是在MediaElementJS's .as文件的构造函数中。在发生事件侦听器之前在ActionScript 3中加载XML

无论如何,主要问题是我一直在阅读,没有办法在AS3中同步加载URL(我仍然很难相信)。此构造函数调用parse('url')和函数addEventListener(EVENT.ADDED_TO_STAGE, initializeAds);

现在广告需要来自XML的信息,但XML尚未准备好。我试图在XML解析器结束致电广告时,我就知道这将是坦然,但它搅乱他们和广告价值从来没有从他们的默认值改变..

哦wherefor艺术你动作锁定机制..

那么无论如何要预加载URL中的数据?

CODE:

public function LoadXML(e:Event):void 
    { 
     removeEventListener(Event.COMPLETE, LoadXML); 
     var xmlData:XML = new XML(e.target.data); 

     episodeData.pre.type = [email protected]; 
     episodeData.pre.url  = xmlData.episode.pre.ad.text(); 

     episodeData.video  = Number([email protected]); /*************** I CAN'T REMEMBER ***********/ 
     episodeData.pageTitle = [email protected]; 
     episodeData.title  = [email protected]; 
     episodeData.source  = xmlData.episode.video.source.text(); 


     [email protected]; 
     episodeData.post.url=xmlData.episode.post.ad.text(); 

     episodeData.nextEpisode=xmlData.episode.post.nextepisode.text(); //if not empty redirect to this 

     xmlLoading = false; 
//THIS IS WHERE I TRIED TO CALL THE FUNCTION I NEED TO LOAD LATER 
    } 

    public function parse() 
    { 

     var xmlLoader:URLLoader = new URLLoader(); 
     //var xmlData:XML = new XML(); 
     xmlLoader.load(new URLRequest(rootURL + '/episode.aspx?associd=' + _episode)); 
     //xmlLoader.addEventListener(Event.COMPLETE, processXML); 
     xmlLoader.addEventListener(Event.COMPLETE, LoadXML); 
    } 

我曾与一个静态的URL地址,当然,诸如此类的东西,但没有骰子尝试过。

构造函数中的代码在我动态分配静态值时工作,但如果我尝试将事件链接到一起以获取动态值和动态赋值,它将进行计算。

在构造函数中,肯定自己都运行:

 parse(); 

     // Google IMA EventListener 
     addEventListener(Event.ADDED_TO_STAGE, initialize); 

回答

2

编辑开始

当我有这种情况发生,我需要的东西,他们两人发生后,正在做我通常使用布尔值来存储,如果每一个也没发生,然后在第三函数的多个异步调用他们都打电话我检查两个布尔人。

以下是我愿意做的是:

protected function viewnavigatorapplication1_preinitializeHandler(event:FlexEvent):void 
{ 
    var loader1:Loader = new Loader(); 
    var loader2:Loader = new Loader(); 

    loader1.addEventListener(Event.COMPLETE, loader1_completeHandler); 
    loader1.load(new URLRequest("http://www.whitehouse.gov")); 
    loader2.addEventListener(Event.COMPLETE, loader2_completeHandler); 
    loader2.load(new URLRequest("http://www.nasa.gov")); 
} 

private function loader1_completeHandler():void 
{ 
    loader1Done = true; 

    //Maybe do some stuff here 

    moveOn(); 
} 
private function loader2_completeHandler():void 
{ 
    loader2Done=true; 

    //Maybe do some stuff here 

    moveOn(); 
} 


private function moveOn():void 
{ 
    if(!loader1Done||!loader2Done) 
     return; 

    //Do whatever needs to be done once both asynchronous events have completed 
} 

如果这不是你的问题,我认为你需要提供更多的代码到位指示等事情发生的意见,因为它是有点不清楚。

例如我不确定你的意思是“如果我动态地分配一个静态值,但如果我尝试链接到事件以获取动态值和动态赋值,它将在构造函数中工作。另外,因为没有数据的例子或者rootURL是什么,所以没有办法从这里调试来理解发生了什么问题。

由于没有错误,我们需要能够在本地重新编译代码的某些部分以提供更好的反馈。

编辑结束

阻断或同步呼叫是关于网络的通信的可怕的想法由于缺乏的网络和/或服务器的可靠性。如果在执行任何其他处理之前锁定了前端应用程序以等待响应,则会导致可怕的用户体验,这就是为什么没有同步远程调用的原因。

服务器爆炸时,同步调用会发生什么情况,即使没有响应,客户端仍会保持锁定状态,用户无法与前端任何其他内容交互,因为它正在等待所有不会响应的响应来?以异步方式完成任何类型的远程调用要好得多,在Java中使用本地磁盘访问(或以其他方式)也是如此,在这种情况下使用异步非阻塞调用通常是更好的方法,以允许其他进程应用程序将继续执行,而不考虑磁盘上的状态或使用情况。

你在做什么应该可以很好地工作,你打电话给远程服务,它响应一些结果并点击你的“侦听器”或“回调”函数,然后你想对结果做些什么,你可以调用另一个函数,并且数据在那里。

这听起来像是唯一没有发生的事情是事实没有反映在UI中的更新,这可能是由于缺少属性的Bindable元数据/事件分派。您是否在返回的事件中检查了结果,是否在数据返回后要调用的方法中放置断点?你正在做的事情是完全可能的,甚至看起来你的大部分都是正确的,但肯定是你做错了,导致你无法完成这项工作。如果你能解释行为的更清楚一点,这将帮助,还你怎么在这里做的:

//这是我试图调用函数我需要加载LATER

+0

tbh我意识到这是加载的正确方式,这就是为什么语言改变了这种情况。 A.)我仍然想知道是否有任何可能的方法来强制它同步......然后B.)我认为我有一些事件监听器范围问题的实际问题。似乎人们很多地遇到它,但我不知道它是什么。你有什么可以借用关于在构造函数中设置事件监听的动态特性的AS3怪癖吗? – 2012-03-31 07:50:31

+1

你是对的我overshot回答这个问题被包裹在关于异步的部分......我编辑我的答案上面添加一个解决方案以上的问题letwrting ...对不起 – shaunhusain 2012-03-31 18:17:42

+0

好吧我试图更新我的回答基于我可以从你所说的内容拼凑出什么,但是如果没有我在上面发布的内容中描述的某些部分,我不能真正测试你的代码。如果我有rootURL,当你“一起链接到事件以获得动态值和动态赋值”时,我可以看到你在做什么,那么我可以帮忙,但没有更多的信息,我只是猜测。 – shaunhusain 2012-03-31 18:42:48

3

加载的网址永远是异步的,所以在对URL加载的响应函数中添加事件侦听器。

现在你的问题听起来像你尝试过,但有一些问题,所以张贴代码,让我们看看。

+0

所以我阅读的能力检查[字节加载](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html)和总字节数。我也读过你不能通过循环造成同步。在继续操作之前是否真的没有办法在完成这些值之后进行检查? – 2012-03-31 07:44:59