我試圖弄清楚焦點機制如何在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) - 爲什麼?
也許我對整個焦點問題的理解是錯誤的? 謝謝你的任何建議。
恕我直言,
拉法爾