나는 팝업을 표시하고 사용자의 입력을 받아이 사용자 정의 이벤트 핸들러가 :폐쇄 4.6
private var mySkinnablePopupContainer:MySkinnablePopupContainer;
private function handleShowGridPopupEvent(event:ShowGridPopupEvent):void {
var mouseDownOutSideHandler:Function = function(mdEvent:FlexMouseEvent):void {
// At this point, event.targetControl contains the wrong object (usually the previous targetControl)
if (mdEvent.relatedObject != event.targetControl) {
mySkinnablePopupContainer.close();
}
}
var gridPopupSelectionHandler:Function = function(popEvent:PopUpEvent):void {
if (!popEvent.commit) return;
// At this point, event.targetData contains the wrong object (usually the previous targetData)
myModel.doSomethingWithData(popEvent.data.selectedItem, event.targetData);
}
if (!mySkinnablePopupContainer) {
mySkinnablePopupContainer = new MySkinnablePopupContainer();
mySkinnablePopupContainer.addEventListener(PopUpEvent.CLOSE, gridPopupSelectionHandler);
mySkinnablePopupContainer.addEventListener(FlexMouseEvent.MOUSE_DOWN_OUTSIDE, mouseDownOutSideHandler);
}
// At this point, event.targetData contains the correct object
mySkinnablePopupContainer.dataProvider = getMyDPArrayCollection(event.targetData);
mySkinnablePopupContainer.open(this);
var point:Point = event.targetControl.localToGlobal(new Point());
mySkinnablePopupContainer.x = point.x + event.targetControl.width - mySkinnablePopupContainer.width;
mySkinnablePopupContainer.y = point.y + event.targetControl.height;
}
기능 핸들러가 호출 될 때마다, 올바른 ShowGridPopupEvent 개체가되지만 의해를 gridPopupSelectionHandler를 호출하면 이전 호출의 이전 객체가 포함됩니다. 처음으로 작동하고 후속 호출이 실패합니다. 어쨌든 이벤트 객체에 대한 참조가 팝업을 열기 전과 후에 팝업 어딘가 사이에서 변경되었습니다. 내가 뭘 잘못 생각하고 있니? 이것은 flex가있는 버그입니까?
나에게 스코핑 문제가있는 것 같습니다. 내 머리 꼭대기에서 : 나는 외부 함수 범위에있는 두 변수에 대한 참조를 만들고이를 대신 (var data : MyData = event.targetData;) 액세스하는 것으로 충분하다고 생각합니다. 이 코딩 스타일 (중첩 된 이벤트 핸들러 및 모두)을 사용하면 코드를 읽고 디버그하기가 어려워지고 (b) 이러한 유형의 범위 지정 문제가 발생하기 쉽습니다. – RIAstar