问题描述
|
我正在根据这篇文章使用代码。
它使用focus_out事件来检测是否存在需要提交的更改。但是,我注意到只有在您从文本字段中但在组件内部单击时,才调用FOCUS_OUT事件。有什么方法可以侦听组件内部的单击?
addEventListener(FocusEvent.FOCUS_OUT,onFocusOut);
protected function onFocusOut(event:FocusEvent):void
{
_updatedText = text;
if(_updatedText != _originalText){
dispatchEvent(new Event(Event.CHANGE));
}
setEditable(false);
}
解决方法
在组件本身中,您可以执行以下操作:
systemManager.addEventListener( FocusEvent.KEY_FOCUS_CHANGE,focusChangeHandler );
systemManager.addEventListener( FocusEvent.MOUSE_FOCUS_CHANGE,focusChangeHandler );
只需确保在从舞台上删除组件之前(假设它是动态添加的)就清理并删除了事件侦听器。这将阻止您堆积一堆事件侦听器。
另外,如果您只想找出有人在特定组件之外单击的时间,则可以执行以下操作:
systemManager.addEventListener( MouseEvent.MOUSE_DOWN,system_mouseDownHandler );
private function system_mouseDownHandler( event:MouseEvent ):void {
if( !event.target != this && !this.contains(event.target as DisplayObject) ){
// Do Something Here
}
}
同样,如果动态添加/删除了该组件,请确保清除所有事件侦听器。
希望这可以帮助!
编辑:
如果要清理eventListener,请执行以下操作(在组件中触发remove事件时调用):
<mx:Component remove=\"myRemoveHandler();\" />
private function myRemoveHandler():void {
if( systemManager.hasEventListener( MouseEvent.MOUSE_DOWN ) systemManager.removeEventListener( MouseEvent.MOUSE_DOWN,system_mouseDownHandler );
}
显然用您最终使用的事件侦听器代替(焦点或鼠标)。
,在LabelEditor类中,分派出一个Event.CHANGE事件,您可以只监听该事件