2010-12-25 8 views
10

मैं बटनों के लूप सेट में बनाना चाहता हूं, और उन्हें कुछ ईवेंट जोड़ना चाहता हूं, लेकिन अनाम कार्य समान हैं। मैं उदाहरण के कोड लिखने:समान तर्कों के साथ लूप में अज्ञात फ़ंक्शंस बनाना

for(var i:int=0;i<5;i++) 
{ 
    var button:SimpleButton = new SimpleButton(...); 
    ... 
    button.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void 
    { 
     trace(i); 
    }); 
} 

... 

और मैं 0,1,2,3 .. 4,4,4,4 के बजाय क्लिक बटन से पता लगाने के लिए चाहते हैं .. तुम्हें पता है मैं यह कैसे कर सकते हैं?

+0

यह भी देखें http://stackoverflow.com/questions/422784/how-to-fix-closure-problem-in-actionscript-3-as3 –

उत्तर

19

जिस समस्या में आप चल रहे हैं वह यह है कि एक्शनस्क्रिप्ट बंद करने का समर्थन नहीं करता है।

दूसरे शब्दों में, परिवर्तनीय i प्रति कार्य के अपने संदर्भ में प्रतिलिपि नहीं है। सभी फ़ंक्शंस i के समान उदाहरण को संदर्भित करते हैं।

अधिक यहाँ जानकारी: http://flex.sys-con.com/node/309329

ऐसा करने के लिए, आप एक समारोह है कि एक समारोह उत्पन्न करता है की जरूरत में:, आप अपने खुद के संदर्भ के साथ समारोह के नए उदाहरण बना अब

public function makeFunction(i:int):Function { 
    return function(event:MouseEvent):void { trace(i); } 
} 

:

button.addEventListener(MouseEvent.CLICK, makeFunction(i)); 
संबंधित मुद्दे