Adobe Flex 3 ヘルプ

Flex Ajax Bridge との統合

独自の Flex および Ajax アプリケーションで FABridge ライブラリを使用するには、Adobe® Flex™ Builder™ の「Ajax Bridge を作成」機能を使用するか、次の手順を手動で実行できます。

  1. src フォルダを Flex アプリケーションの ActionScript クラスパスに追加します。
  2. コマンドラインからコンパイルしている場合は、--actionscript-classpath コンパイラオプションを指定して、src フォルダをアプリケーションに追加します。
  3. 次のタグをアプリケーションファイルに追加します。
    <mx:Application ...>
        <fab:FABridge xmlns:fab="bridge.*" />
    ...
    
    

JavaScript からアプリケーションインスタンスにアクセスするには、次のコードを使用します。

function useBridge()

 {
 var flexApp = FABridge.flash.root();
 }

プロパティの値を取得するには、関数のように呼び出します。次に例を示します。

function getMaxPrice() 
 {
 var flexApp = FABridge.flash.root();
 var appWidth = flexApp.getWidth();
 var maxPrice = flexApp.getMaxPriceSlider().getValue();
 }

JavaScript からプロパティの値を設定するには、setPropertyName() 関数を呼び出します。次に例を示します。

function setMaxPrice(newMaxPrice) 
 {
 var flexApp = FABridge.flash.root();
 flexApp.getMaxPriceSlider().setValue(newMaxPrice);
 }

ActionScript から呼び出した場合と同様に、直接オブジェクトメソッドを呼び出すことができます。次に例を示します。

function setMaxPrice(newMaxPrice) 
 {
 var flexApp = FABridge.flash.root();
 flexApp.getShoppingCart().addItem("Antique Figurine", 12.99);
 }

イベントハンドラなどの関数を JavaScript から ActionScript に渡すこともできます。次に例を示します。

function listenToMaxPrice() 
 {
 var flexApp = FABridge.flash.root();
 var maxPriceCallback = function(event)
 {
 document.maxPrice = event.getNewValue();
 document.loadFilteredProducts(document.minPrice, document.maxPrice);
 }
 flexApp.getMaxPriceSlider().addEventListener("change", maxPriceCallback);
 }

Flex ファイル上で初期化コードを実行するには、まずダウンロードし、初期化する必要があります。ムービーが初期化される際に呼び出されるコールバックを登録します。次に例を示します。

function initMaxPrice(maxPrice)
 {
 var initCallback = function()
 {
 var flexApp = FABridge.flash.root();
 flexApp.getMaxPriceSlider().setValue(maxPrice);
 }
 FABridge.addInitializationCallback("flash",initCallback);
 } 

同一ページ上で複数のアプリケーションを記述するには、flashvars メカニズムを使用して、これらに固有のブリッジ名を付けます。このブリッジ名を使用してブリッジからアクセスし、初期化コールバックを登録します。次に例を示します。

<object ...>
 <param name='flashvars' value='bridgeName=shoppingPanel'/>
 <param name='src' value='app.swf'/>
 <embed ... flashvars='bridgeName=shoppingPanel'/>
 </object>
function initMaxPrice(maxPrice)
 {
 var initCallback = function()
 {
 var flexApp = FABridge.shoppingPanel.root();
 flexApp.getMaxPriceSlider().setValue(maxPrice);
 }
 FABridge.addInitializationCallback("shoppingPanel",initCallback);
 }

自動メモリ管理

FABridge には、ブリッジ全体に渡されるすべてのオブジェクトの参照カウントメカニズムを使用する、自動メモリ管理が用意されています。JavaScript 側から作成されたオブジェクトは、メモリを手動で解除しない限り、メモリに保存されます。イベントおよびその他の ActionScript 起動オブジェクトは、これらを直接処理する、対応する JavaScript 関数が実行を完了すると同時に破棄されます。addRef() メソッドを手動で呼び出して、オブジェクトを利用可能な状態に維持するか、release() メソッドを手動で呼び出して、その参照カウンタを減少させます。

JavaScript 内で setTimeout() 関数を使用して、関数呼び出しチェーンを切断する必要がある場合(次の例に示すように、後でイベントを処理する場合など)、イベントが引き続き存在していることを確認する必要があります。FABridge は参照カウントメカニズムを実装してメモリを保存するので、ActionScript からスローされたイベントは dispatch 関数が存続している間のみ存在します。

var flexApp = FABridge.flash.root();
flexApp.getMaxPriceSlider().addEventListener("change", maxPriceCallback );
function maxPriceCallback(event) {
//when the doSomethingLater function is hit, the event is no longer
     //available;
//to make it work you would have to call
//FABridge.addRef(event);
//then, when you're done with it, call FABridge.release(event);
setTimeout(function() {doSomethingLater(event);},10);
}

手動によるオブジェクトの破棄

JavaScript から releaseNamedASObject(myObject) メソッドを呼び出して、参照カウントに関係なくブリッジ全体に渡された特定のオブジェクトを手動で破棄することができます。これにより、ブリッジ全体のオブジェクトが無効化され、将来の呼び出しまたはそのメソッドの 1 つがエラーをスローします。

例外の処理

一部の JavaScript アクションの直接の結果として、ブリッジの ActionScript で発生する例外は、ブリッジ全体で JavaScript にスローされるようになりました。このメカにニズムは次のように動作します。

  • ActionScript セクションで例外が発生すると、try-catch ブロックによってキャッチされ、直列化されて、JavaScript に渡されます。
  • JavaScript 側が ActionScript からの応答を受信すると、例外の直列化をチェックし、見つけた場合は、JavaScript エラーを ActionScript から受信したメッセージと共にスローします。

注意: 例外情報をキャッチし、使用するには、ActionScript に呼び込まれるコードを try-catch ブロックにより囲む必要があります。catch(e)ブロックでエラーを処理することができます。

Flex Ajax Bridge の制限

FABridge ライブラリは、Mozilla Firefox 2(Windows および Linux)、Microsoft Internet Explorer 6、Opera 9 および Apple Safari 2.0.4 でテストされました。

ブリッジ全体にわたって JavaScript にスローされる例外は、ユーザーが Flash Debug Player をインストールしてエラーの説明全体を表示するかどうかによって異なります。エラーの説明全体が表示されない場合は、エラー ID のみスローされます。

ActionScript から JavaScript に匿名オブジェクトが送信された場合、パフォーマンス上の理由から、ブリッジは プリミティブ、配列およびその他の匿名オブジェクトだけが含まれていると見なし、厳密に型指定されたオブジェクトやメソッドは含まれていないと見なします。匿名オブジェクトの一部として送信されたインスタンスやメソッドは正常にブリッジされません。

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート