उत्तर

18

निश्चित रूप से, मुझे इसके साथ कुछ परेशानी हुई है। currentTarget संपत्ति आईवेन्ट लिस्टर है जिसके लिए आपने ईवेंट हैंडलर पंजीकृत किया है। target वह व्यक्ति है जिसने वर्तमान में आप जिस ईवेंट को संभाला है उसे प्रेषित किया है। तो currentTarget परिवर्तन, target नहीं है।

निम्नलिखित उदाहरण देखें:

नमूना अनुप्रयोग

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    creationComplete="addListeners()"> 

    <mx:Script> 
     <![CDATA[ 

      protected function addListeners():void 
      { 
       greatGrandParent.addEventListener(Event.COMPLETE, completeHandler); 
       grandParent.addEventListener(Event.COMPLETE, completeHandler); 
       aParent.addEventListener(Event.COMPLETE, completeHandler); 
       child.addEventListener(Event.COMPLETE, completeHandler); 
       // dispatch event that "bubbles", second param is "true" 
       // dispatched from child 
       child.dispatchEvent(new Event(Event.COMPLETE, true)); 
      } 

      protected function completeHandler(event:Event):void 
      { 
       trace("target: ", event.target + ", currentTarget: ", event.currentTarget); 
      } 

     ]]> 
    </mx:Script> 

    <mx:Panel id="greatGrandParent"> 
     <mx:Panel id="grandParent"> 
      <mx:Panel id="aParent"> 
       <mx:Button id="child"/> 
      </mx:Panel> 
     </mx:Panel> 
    </mx:Panel> 

</mx:Application> 

आउटपुट

target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent.grandParent.aParent.child 
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent.grandParent.aParent 
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent.grandParent 
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent 

यह प्रदर्शन वस्तुओं की एक सरल पेड़ है, और जब अनुप्रयोग मैं के लिए तैयार है :

  1. पेड़ में प्रत्येक घटक पर एक ही घटना के लिए श्रोताओं को जोड़ें।
  2. एक मनमाना घटना (केवल प्रदर्शन के लिए) प्रेषित करें। मैंने Event.COMPLETE चुना है।
सत्य पर

के बाद से सब कुछ है कि एक ही घटना के लिए एक eventhandler पंजीकृत किया गया है, और के बाद से मैं निर्धारित किया है bubbles (new Event(type, bubbles)), पेड़ में, बच्चे से greatGrandParent और उससे आगे के लिए कुछ भी, कि Event.COMPLETE के लिए एक ईवेंट हैंडलर पंजीकृत किया गया है, उस विधि को चलाएगा: completeHandler। घटनाक्रम फिर श्रृंखला को वापस ले जाते हैं। target वह ईवेंट है जिसने ईवेंट भेजा था, इसलिए child ने इसे प्रेषित किया, यह स्थिर होना चाहिए। currentTarget क्या परिवर्तन है।

इसका मतलब है कि, आप यह जांचना चाहते हैं कि जब आप फ्लेक्स में डेटाग्रिड पर रोलिंग करते हैं, तो आप जानना चाहते हैं कि जब आप डेटाग्रिड में आइटम विक्रेताओं में से किसी एक के अंदर चेकबॉक्स पर रोल करते हैं तो आप जानना चाहते हैं। एक तरीका है प्रत्येक आइटम पर AddEventListener MouseEvent.ROLL_OVER के लिए विक्रेता का चेकबॉक्स।

protected function dataGrid_rollOverHandler(event:MouseEvent):void 
{ 
    // event.currentTarget is DataGrid 
    if (event.target is CheckBox) 
     trace("rolled over checkbox!"); 
} 

कि कैसे मैं अक्सर event.target का उपयोग करें: एक और तरीका है MouseEvent.ROLL_OVER के लिए डेटा ग्रिड में ही addEventListener, और जाँच क्या लक्ष्य घटना पर है के लिए है।

आशा है कि मदद करता है, लांस

-9

आप इस साइट पर ट्यूटोरियल के माध्यम से जाना चाहिए: http://www.adobe.com/devnet/flex/videotraining/ एक परिचय के लिए इस तरह एक सवाल पूछने से पहले फ्लेक्स करने के लिए। आपका प्रश्न दिन 1 पर कवर किया गया है।

संबंधित मुद्दे