簡體   English   中英

Flex 3:同步加載xml文件

[英]Flex 3: synchronously loading an xml file

我的問題非常簡單:在flex3中,有沒有辦法同步加載xml文件?

我知道如何使用load事件異步加載。 這可能是有用的,也可能不是。 我只是想讀取文件,解析它,做我必須做的事情,然后繼續執行代碼。

我有一個使用xml文件來存儲一些配置參數的組件。 我需要在初始化對象時讀取文件。 但是,使用事件模型,我無法控制何時加載文件,因此我必須編寫代碼以“等待”加載代碼。 這太荒謬了,還是我呢? 我想要這樣的代碼:

var foo:Foo = new Foo(); //This constructor should read the xml and initialize the object.
foo.doSomething(); //When I call this method the xml must be already handled.

我可以在事件上處理xml文件,它工作正常,但事件 doSomething方法之后觸發。

我希望我已經解釋過了自己。 我認為這應該很簡單,但它讓我發瘋。 除非真的有必要,否則我不想編寫代碼來等待事件。 我覺得這一切應該只是一行代碼!

老問題,但我打賭很多人仍然來這里,這是我的解決方案。

創建一個自定義事件,您可以在處理resultEvent的函數內部進行調度

讓你想要做的事情,我認為在這種情況下它是foo,聽這個自定義事件,然后調用doSomething()。

我認為,有一個“后”事件加載。

所以你必須在兩個不同的方法中將調用拆分為new()和調用do(),因此在initalisation中調用new(),在load()之后do()是calld

pseudosyntax:

beforeInitialisation()
  disableDoSomething()
  new()...
  loader.addEvent(AFTERLOAD, afterLoad)


afterLoad()
  enableDoSomething()


someMethod()
  doSomething()

我會回答自己,但我仍然想知道是否有人想出更好的想法。 來自Dirkgently和Peter Miehle的答案都很有幫助,但並沒有解決我的實際問題。

似乎同步加載是不可能的。 加載可能會失敗或花費太長時間,因此我們無法凍結應用程序。 這是合理的,但我仍然認為它可以使代碼更復雜。

我要做的是在創建對象之前加載xml文件,並將其作為參數傳遞給構造函數。 這樣我就可以確保對象在需要時加載了xml文件。 然而,這也不是一個理想的解決方案,因為現在我必須讓另一個班負責Foo的“私事”。

有更好的想法嗎?

無法同步加載,為網絡構建閃存,您無法確定呼叫需要多長時間。 空氣是不同的,因為它從文件系統加載,並且那里沒有相同數量的延遲。

最干凈的解決方案是監聽Foo內部的負載並從內部調用doSomething(),這樣你的“外部”類就不需要打擾了。

如果您確實需要從外部調用foo.doSomething(),則可以使用事件系統。 讓你的Foo類在加載完成后調度一個事件:

dispatchEvent(new Event(Event.COMPLETE, true));

要抓住它,你需要像這樣聽:

foo.addEventListener(Event.COMPLETE, handleFooComplete);

你的事件處理函數應該如下所示:

private function handleFooComplete(e:Event):void{
    foo.doSomething();
}

但是你選擇這樣做,你需要在加載器上監聽Event.COMPLETE。 沒有解決這個問題。

調用foo.doSomething(); 從XML加載事件的事件處理程序內部(例如EVENT.Complete或某些,具體取決於您加載文件的確切程度)。 這是推薦的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM