2009-05-05 8 views
1

// ActionScriptコードにイベントを追加するは、メニューオプション

輸入mx.controls.Menu; import flash.events.MouseEvent; //コンポーネントのPopUpButtonのメニューにaddeventsを追加する方法を

<mx:PopUpButton id="popUpButton" 
      label="Please select an item" 
      openAlways="true" 
      creationComplete="init();" /> 

 private var menu12:Menu; 

     private function init():void { 
      menu12 = new Menu(); 
      menu12.labelField = "@label"; 
      menu12.dataProvider = xmlDP; 
      menu12.showRoot = false; 
      menu12.width = popUpButton.width; 
      popUpButton.popUp = menu12; 
     } 

// XML情報

 <menu1 label="Some introduction" /> 
     <menu2 label="Disabled State (disabled)." enabled="false" /> 
     <sep1 type="separator" /> 
     <menu3 label="parent"> 
      <menu4 label="child1" /> 
     </menu3> 
     <menu5 label="parent (disabled)" enabled="false"> 
      <menu6 label="child1" /> 
      <menu7 label="child2" /> 
      <menu8 label="child3" /> 
     </menu5> 
     <menu9 type="separator" /> 
     <menu10 type="separator" /> 
     <menu11 id="leftButton" label="Left" type="radio" groupName="radioGroup" toggled="true" enabled="true" /> 
     <menu12 id="rightButton" label="Right" type="radio" groupName="radioGroup" enabled="false" /> 
     <menu13 id="popupButton" label="Popup" type="radio" groupName="radioGroup" enabled="false" /> 

    </root> 

答えて

1

ここで私はそれを行う方法です....

格納するXML項目のそれぞれに属性を追加します。各メニュー項目のイベント名:

<menu4 label="child1" eventName="child1Event" /> 

そして、既知の各イベントのイベントリスナーを追加する親コンポーネントが初期化されます。

private function init():void 
{ 
    menu12 = new Menu(); 
    ... 

    addEventListener("child1Event", child1EventHandler); 
} 

private function child1EventHandler(event:Event):void 
{ 
    .... 
} 

(あなたもイベントリスナーを動的

private function init():void 
{ 
    menu12 = new Menu(); 
    ... 

    addEventListener("child1Event", 
     function(event:Event) 
     { 
      alert(event.type); 
     } 
     ); 
} 

を追加するためにXMLを解析できによってitemClickイベントハンドラを追加します。

private function popUpButton_itemClickHandler(event:MenuEvent):void 
{ 
    if ([email protected] != null) 
     dispatchEvent(new Event([email protected])); 
} 

<mx:PopUpButton id="popUpButton" 
     label="Please select an item" 
     openAlways="true" 
     creationComplete="init();" 
     itemClick="popUpButton_itemClickHandler(event);" /> 
0

は、リスナー関数をあなたのスクリプトへ

private function itemClickHandler(event:MenuEvent):void{}

を追加するには、init関数の最後で

menu12.addEventListener(MenuEvent.ITEM_CLICK,itemClickHandler);

を追加します。

+0

'menu12.addEventListener(MenuEvent.ITEM_CLICK、itemClickHandler);' - これはメニュー用ですが、私は各XMLのノードに追加したいです。例えば、XML内の特定のノードのイベントを追加したい場合はどうすればいいですか? – Kevin

0

私はあなたが望むように特定のXMLノードにイベントハンドラを置くことはできないと思います。どのハンドラを実行すべきかを知るには、入ってくるイベントを調べなければなりません。フィルタリングコードクリーナーを作るために警備員のテオHultbergのコンセプトを見てみましょう:

http://blog.iconara.net/2008/03/30/separating-event-handling-from-event-filtering/

関連する問題