2012-02-15 17 views
4

私はこれは私がいることを行う関数を持っているするitemRenderer のitemRenderer派遣カスタムイベント

package events 
{ 
    import customClass.Product; 

    import flash.events.Event; 

    public class CopyProductEvent extends Event 
    { 
     public static const COPY_PRODUCT:String = "COPY_PRODUCT"; 
     public var picked:Prodotti; 

     public function CopyProductEvent(type:String, picked:Product) 
     { 
      super(type); 
      this.picked = picked; 
     } 
    } 
} 

私のカスタムイベントである

のitemRendererのカスタムからカスタムイベントをディスパッチしようとしています:

 private function sendEvent(o:Product):void 
     { 
      dispatchEvent(new CopyProductEvent(CopyProductEvent.COPY_PRODUCT,o)); 
     } 

そして、メインアプリケーションで私がSPを持っています...箱舟一覧と私は、アプリケーションと、リスト自体に両方のEventListenerを追加しようとしましたが、彼らは呼ばれることはありません

this.addEventListener(CopyProductEvent.COPY_PRODUCT, 
     function(e:Product):void{ 
      ... 
    }); 

    list.addEventListener(CopyProductEvent.COPY_PRODUCT, 
     function(e:Product):void{ 
      ... 
    }); 

なぜ?!?どこが間違っていますか?

機能からのイベントが正しく送出された...私はそれを傍受することはできません...あなたのイベントがバブリングされていないよう

答えて

9

が鳴ります。

カスタムイベントコンストラクタに(デフォルトでは、falseです)bubbles引数を追加します:AS3でバブリングイベントに

public function CopyProductEvent(type:String, picked:Product, bubbles:Boolean = true) 
     { 
      super(type,bubbles); 
      this.picked = picked; 
     } 

素敵な説明はここで見つけることができます: Event Bubbling in AS3

+0

はそれをありがとう仕事をしていました...私はあなたのソリューションを待っていましたが、itemrendererから、私が所有者からディスパッチしたイベントを処理したときに別のもの(洗練されていないもの)を見つけました: 'owner.dispatchEvent ...'あなたの解決策は良い方法です... – Marcx

+0

はい、その解決策も機能します。ただし、itemRendererが所有者と緊密に結合されているため、レンダラーを再利用したい場合は、同じコンポーネント構造を使用する必要があります。イベントをバブルさせると、簡単に再利用できます。 – James

+0

ええ、私はそれを持っている...私はバブルの事を知らなかった:) – Marcx