« 携帯不調 | Home | 寒い »

Oct 292008

progression検証 #6 外部データを読み込んでみる(XML編)

この問題(apeirophobia: Progressionの中でPV3D)がまだクリアになっていないのだけど、ちょっと先に進みます。今回は外部データの読み込みを試してみます。

一般的に外部データとして想定されるものはxml,json,jpg,swf等があります。as3になってバイナリも読み込めるのですがそれはまた別の話で。

最初に至極まっとうにXMLでやってみます。IndexScene.asの_onLoadの中に組み込んでみます。
#code-1

private var _loadURL:LoadURL;
~
protected override function _onLoad():void {
	_loadURL = new LoadURL(new URLRequest("test.xml"));
	_loadURL.after(parseXML);
	_loadURL.execute();
}
private function parseXML():void {
	var myXML:XML = new XML(_loadURL.data);
	trace(myXML);
}

こんな感じ。 次にcommandを使ってみる。

#code-1の"_loadURL.execute();"を削除して、"_onLoad"内に
#code-2

addCommand(
	this._loadURL
);

でOK。 で、次は"after"をjQueryっぽくつなげてみる。#code-1の"_loadURL.after(parseXML);"を削除してaddCommand内を #code-3

addCommand(
	this._loadURL.after(parseXML)
);

これでもOK。 一応"after"の仕様はCommand - Progression 3.0 - API Referenceな感じで、引数も付けれるのだけど、ちょっとver.2から仕様が変わっていてProgressionのCommandクラスを使いこなしたいよ(その3) - studio-hedgehog blogでやられているような方法(なんていうのか分からん)ではまだ実装できてない。

例えばこんな感じ。
#code-4

addCommand(
	new LoadURL(new URLRequest("test.xml")).after(parseXML,[this.data])
);

コンパイルすると

1119: 未定義である可能性が高いプロパティ data に静的型 test:IndexScene の参照を使用してアクセスしています。

となります。 一応afterのヘルプには「関数実行時の this 参照は実行しているコマンドインスタンスになります。」とあるので、恐らくコマンドインスタンスはIndexSceneと言うことなのだと思います。(コマンドインスタンスという言葉が良く分からなかったw)

Ver.2のLoadURLには

 import flash.net.URLRequest;
 import jp.progression.commands.LoadURL;
 
 // LoadURL コマンドを実行する
 new LoadURL( new URLRequest( "http://progression.jp/" ) )
  .before( null, trace, [ "テキストデータを読み込みます。" ] )
  .after( null, trace, [ "読み込んだデータの内容 :", this.data ] )
  .execute();

と書いてあったのがver.3から

  // LoadURL インスタンスを作成します。
  var com:LoadURL = new LoadURL( new URLRequest( "external.xml" ) );
  
  // エラー処理を設定します。
  com.error( function( e:Error ):void {
   // エラーを解決します。
   this.executeComplete();
  } );
  
  // LoadURL コマンドを実行します。
  com.execute();

となっているので基本的に一応インスタンス化して処理ということになっているのかも知れない。(知らんけど) commandの配列とかを経由してLoadURL.dataにアクセスできる口があれば取れるのかも知れないけど・・・。ということで一旦休憩。

2 Comments

> 一応afterのヘルプには「関数実行時の this 参照は実行しているコマンドインスタンスになります。」とあるので、恐らくコマンドインスタンスはIndexSceneと言うことなのだと思います。(コマンドインスタンスという言葉が良く分からなかったw)

すいません!
僕もどう説明していいものか困りつつ書いているので分かり辛い点がかなりあると思いますが、この場合のコマンドインスタンスとは LoadURL インスタンスのことをさしています。
ですので、this.data は LoadURL.data ではなくて IndexScene.data を参照しようとしてコンパイルエラーが発生してしまっています。


また、外部ファイルの読み込みと処理のフォーマットですが、一応公式でオススメしているパターンは以下の書き方です。

addCommand(
 new LoadURL( new URLRequest( "external.xml" ) ),
 function():void {
  // この場合の this は、匿名関数が自動変換された Func コマンド自身になります。
  trace( this.latestData );
 }
);

読み込み処理後の参照については、こちらのサンプルでさまざまなパターンがテストされていますので、よければチェックしてみてください。
http://progression.libspark.org/browser/trunk/examples/flash_classbase/command_LoadURL/Index.as

>trace( this.latestData );
おお!こんなプロパティがあったとは!?
いやー本当に色々細かいところまで定義してあってすごいです。(見つけるのが大変ですがw)

>よければチェックしてみてください。
ありがとございますー!みてみまっす!(理解できるかわかんないですけど汗)

Leave a comment

Search and Archives