XMLが外部ソースからロードされるときに、プログラムフローの制御に問題があります。FlashBuilder4.6を使用しています
何が起こるべきか:ローダーを使用してください。ロードされたときにリッスンします。COMPLETEイベントが発生したら、次に進みます。何が起こっているのか:ローダーを使用してください。ロードされたときにリッスンします。ただし、COMPLETEイベントが発生する前に、プログラム制御は呼び出し元のクラスに戻ります。その間、プログラムはnullのデータにアクセスしようとしているため、続行してエラーをスローします。
3つのクラスが含まれます。
- AdvocacyWiz.mxml-このAIRモバイルアプリのベースMXMLファイル
- Model.as-モデルクラス
- myXMLLoader.as-ローダーがデータをロードし、完了時にイベントをディスパッチするクラス。
AdvocacyWiz.mxmlがステージに追加されたら、AdvocacyWiz.mxmlで関数setUpModel()を呼び出しています。そのクラスのsetUpModel関数は次のようになります。
Model.Instance.initialize(); //model is a singleton
initialize関数呼び出しは、私のXMLLoader.asクラスのローダーを呼び出します。ここで、イベントリスナーはCompleteイベントをリッスンしますが、これは遅すぎてnullエラーの発生を防ぐことができません。
編集:ここにコードがあります-
AdvocacyWiz.mxml(これが最初に起動します):
protected function addedToStageHandler(event:Event):void
{
setUpModel();
stage.scaleMode = StageScaleMode.NO_SCALE;
//... additional layout functions
private function setUpModel():void {
Model.Instance.initialize();
}
モデルの場合(これは2番目に発生します):
public function initialize():void {
addEventListeners(); //this includes listener for StoriesXMLLoader.STORY_LOADED event which will be dispatched from the loader class.
useExternalXML();
...
}
private function useExternalXML():void
{
myLoader.getStory("1140");
}
Loaderクラスの場合:
public function getStory(storyId:String):void {
var url:String = "http://mysite.com/whatever.xml";
myLoader.dataFormat = URLLoaderDataFormat.TEXT;
myLoader.addEventListener(Event.COMPLETE, storyXMLLoaded);
myLoader.load(new URLRequest(url));
}
private function storyXMLLoaded(e:Event):void {
storyXML = new XML(e.target.data);
dispatchEvent(new Event(StoriesXMLLoader.STORY_LOADED));
}
私がやりたいのは、setUpModel()を呼び出すことですが、モデルに実際にデータが含まれるまで、フローはmxmlクラスに戻されません。
ありがとう。