我想將原生Flex複選框改爲只改變狀態,點擊時框。如果用戶點擊標籤,狀態不應該改變。Flex複選框:當標籤上點擊時禁用狀態改變
單擊事件無法靜音,因爲它在父母組件中使用。
任何想法如何獲得這樣的功能?如何檢測,該用戶有點擊標籤?
感謝, 拉法爾
我想將原生Flex複選框改爲只改變狀態,點擊時框。如果用戶點擊標籤,狀態不應該改變。Flex複選框:當標籤上點擊時禁用狀態改變
單擊事件無法靜音,因爲它在父母組件中使用。
任何想法如何獲得這樣的功能?如何檢測,該用戶有點擊標籤?
感謝, 拉法爾
馬蒂皮特是非常接近正確的答案。我已經爲他的代碼添加了一個事件處理程序,這會停止傳播 - 現在它完美地工作(如預期)!
下面的代碼是一個擴展mx:CheckBox
類:
override protected function createChildren():void {
super.createChildren();
this.mouseChildren = true;
textField.mouseEnabled = false;
textField.addEventListener(MouseEvent.CLICK, textFieldClickHandler);
}
protected function textFieldClickHandler(me:MouseEvent):void{
me.stopImmediatePropagation();
}
謝謝。
哇。當mouseEnabled = false時,'MouseEvent.CLICK'會觸發,我真的很驚訝。這根本不直觀。仍然 - 我很高興你找到了一個可行的解決方案。 – 2010-11-10 21:39:50
解決方法 - 沒有複選框標籤和單獨的標籤附近。
如果它是一個暈複選框,我想創建一個子類,並覆蓋createChildren()
,喜歡的東西:
override protected function createChildren():void {
super.createChildren();
// in Button, this is false by default, however we want to restrict
// clicking to the button itself, not the label, so allow the children
// to recieve mouse events, to prevent the button from dispatching them.
this.mouseChildren = true;
textField.mouseEnabled = false;
}
這似乎是一個漂亮的缺憾黑客攻擊,但它可能工作(我還沒有測試它)。
如果它是一個Spark複選框,那麼您可以創建一個單獨的皮膚。更乾淨!
謝謝,它幾乎奏效 - 我在下面提供完整的解決方案。 – rafalry 2010-11-10 18:51:06
光暈或Spark複選框? – 2010-11-10 10:20:31