URLを使ってFlex2にパラメータを渡す
Flex2単体よりもAjaxとか動的に生成されるHTMLとの連携が大事だと思ってみたので、調べたら簡単にできました。
URL使ってFlex2にパラメータを渡します。
以下サンプル。urlparam.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" creationComplete="initVars()"> <mx:Script><![CDATA[ // Declare bindable properties in Application scope. [Bindable] public var myName:String; [Bindable] public var myHometown:String; // Assign values to new properties. private function initVars():void { myName = Application.application.parameters.myName; myHometown = Application.application.parameters.myHometown; } ]]></mx:Script> <mx:VBox> <mx:HBox> <mx:Label text="URLに日本語入れてみた: "/> <mx:Label text="{myName}" fontWeight="bold"/> </mx:HBox> <mx:HBox> <mx:Label text="URLエンコードされた日本語いれてみた: "/> <mx:Label text="{myHometown}" fontWeight="bold"/> </mx:HBox> </mx:VBox> </mx:Application>
解説します。
URLから受け取る名前を指定します。Flex外部から入力されるパラメータの場合、[Bindable]と付くようです。DataGridは外部から入力されたオブジェクトを参照しているので[Bindable]と付きます。URLで指定するときには、名前=値 の形式で渡しましょう。
[Bindable] public var myName:String;
ApplicationタグはFlexのロード後に最初に実行する処理を指定します。今回はinitVars()メソッドを指定しています。
<mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" creationComplete="initVars()">
Application.applicationはトップレベルでロードされたFlexを指しています。このサンプルであればurlparam.mxmlとなります。Application.application.parametersは、urlparam.mxmlのフィールド群を指していて、Application.application.parameters.myNameは、urlparam.mxml内で定義されているフィールドmyNameを指しています。
myName = Application.application.parameters.myName;
{myName}はフィールドmyNameの参照値を指しています。
<mx:Label text="{myName}" fontWeight="bold"/>
というわけで、実行するにはFlexBuilder2でコンパイルしたurlparam.swfをWEBサーバーにおいて、以下のように指定をするとパラメータが渡っていることが分かります。IEから日本語文字列とURLエンコードされた文字列をやってみましたが、正しく表示されました。
http://webserver/urlparam.swf?myName=はろー&myHometown=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%82%8F
・参考資料
Applicationタグ
http://livedocs.macromedia.com/labs/1/flex/langref/mx/core/Application.html
Passing request data into Flex applications
http://livedocs.macromedia.com/flex/20beta1/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001296.html