我试图弄清楚焦点机制如何在Flex中工作。下面是我的意思的例子:焦点如何在Flex中工作?
假设我们有一个简单的web应用程序,其中包含自定义组件,该应用程序扩展了Canvas
并实现了mx.managers.IFocusManagerComponent
。该组件覆盖focusInHandler
和focusOutHandler
方法,并显示有关如何调用它们的一些反馈(更细或更粗的边界)。此自定义组件还包含一些Text
。
组件的源是:
<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>
这里是实时版本(与源视图):http://rafalrybacki.com/lab/focus_question/。在应用程序中,Canvas
下面还有一个TextArea
- 以便在测试时轻松进行焦点操作。
的问题:
如果你的画布它获得焦点(
focusInHandler
被称为)在紫罗兰色点击一次,然后如果你再次点击焦点丢失(focusOutHandler
叫) - 为什么?你中点击一个
Text
的Canvas
获得焦点(focusInHandler
调用),并保持它被点击时,无论在区域(称为focusOutHandler
nevet) - 为什么?
也许我对整个焦点问题的理解是错误的? 谢谢你的任何建议。
恕我直言,
拉法尔