2010-12-25 27 views
10

Tôi muốn thực hiện trong các nút vòng lặp và thêm vào một số sự kiện, nhưng các chức năng ẩn danh giống nhau. Tôi viết mã ví dụ:Tạo các hàm ẩn danh trong vòng lặp không cùng đối số

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

... 

Và tôi muốn theo dõi 0,1,2,3 .. từ các nút bấm thay vì 4,4,4,4 .. Bạn có biết làm thế nào tôi có thể làm điều này?

+0

xem thêm http://stackoverflow.com/questions/422784/how-to-fix-closure-problem-in-actionscript-3-as3 –

Trả lời

19

Sự cố bạn đang gặp phải là ActionScript không hỗ trợ các bao đóng.

Nói cách khác, biến i không được sao chép vào ngữ cảnh riêng của nó cho mỗi chức năng. Tất cả các hàm tham chiếu đến cùng một thể hiện của i.

biết thêm thông tin ở đây: http://flex.sys-con.com/node/309329

Để làm điều này, bạn cần có một chức năng mà tạo ra một chức năng:

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

Bây giờ, bạn tạo các trường hợp mới của hàm với bối cảnh riêng của họ:

button.addEventListener(MouseEvent.CLICK, makeFunction(i)); 
Các vấn đề liên quan