Intento descubrir cómo funciona el mecanismo de enfoque en Flex. Aquí viene el ejemplo de lo que quiero decir:¿Cómo funciona el enfoque en Flex?
Supongamos que tenemos una aplicación web simple, que contiene un componente personalizado que extiende Canvas
e implementa mx.managers.IFocusManagerComponent
. Este componente anula los métodos focusInHandler
y focusOutHandler
y muestra algunos comentarios sobre cómo se llaman (borde más delgado o más grueso). Este componente personalizado también contiene algunos Text
.
La fuente del componente es:
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="100" creationComplete="cc();" implements="mx.managers.IFocusManagerComponent">
<mx:Script>
<![CDATA[
import mx.containers.Canvas;
import mx.controls.Text;
import mx.controls.TextArea;
import mx.core.UIComponent;
import mx.managers.IFocusManagerComponent;
public function cc():void
{
text = new Text;
text.text = "123";
addChild(text);
setStyle("backgroundColor", "0xddddff");
setStyle("borderColor", "0x000000");
setStyle("borderThickness", 1);
setStyle("borderStyle", "solid");
}
private var text:Text;
override protected function focusInHandler(e:FocusEvent):void {
trace("focusInHandler, currFocus: " + focusManager.getFocus());
setStyle("borderThickness", 4);
}
override protected function focusOutHandler(e:FocusEvent):void {
trace("focusOutHandler, currFocus: " + focusManager.getFocus());
setStyle("borderThickness", 1);
}
]]>
</mx:Script>
</mx:Canvas>
Aquí está la versión en vivo (con vista de origen): http://rafalrybacki.com/lab/focus_question/. En la aplicación también hay un TextArea
debajo del Canvas
- para facilitar la manipulación del foco durante la prueba.
Las preguntas:
Si hace clic una vez sobre una violeta lienzo recibe el foco (
focusInHandler
se llama), a continuación, si hace clic de nuevo se pierde el foco (focusOutHandler
llama) - por qué?de hacer clic en un
Text
laCanvas
recibe el foco (focusInHandler
llama) y lo mantiene cuando se hace clic en cualquier lugar del área (focusOutHandler
Nevet llama) - por qué?
¿Quizás mi comprensión del problema del enfoque completo es incorrecta? Gracias por cualquier sugerencia.
Con respecto,
Rafal