2011-04-01 70 views
1

我的問題在標題中有很多描述。只是一些細節..我創建一個自定義組件(基於ComboBox)和重寫一些基本方法。最近我發現,當我以百分比設置它的寬度而不是固定的寬度時,它會變得很奇怪。它傾向於不斷地調用commitProperties方法並最終失敗。當我將它的寬度設置爲固定值時 - 所有作品都像魅力一樣。我錯過了什麼?下面是一些代碼..自定義組件中的CommitProperties不能以百分比寬度工作

override protected function commitProperties():void { 
     super.commitProperties(); 

     //some stuff ... 

     TextInput(textInput).setSelection(cursorPosition, cursorPosition); 
     if (cursorPosition == textInput.text.length || cursorPosition == 0) { 
      TextInput(textInput).horizontalScrollPosition = (cursorPosition == 0) ? 0 : textInput.width; 
     } 
    } 

這裏,textInput.width返回正確的計算值,在這兩種情況下。 而且,只爲一個情況下,如果它的需要:

override protected function measure():void { 
     super.measure(); 
     measuredWidth = 160; 
    } 

我不知道是否需要別的東西..只是問,如果這樣。 在此先感謝:)

回答

3

這個問題並不明顯,但在重寫的commitProperties()執行結束時調用super.commitProperties();而不是在開始時通常是一個好習慣。

如果您的//some stuff...塊無效屬性,則在第一行調用super.commitProperties();時,將無法正確處理該屬性。

+0

+1好打電話沒有多少人瞭解ui框架 – 2011-04-01 17:12:44

+0

感謝您的回覆和建議。但不幸的是,它不能解決我的問題:( – Antenka 2011-04-04 08:35:40

0

可惜這不是可以調試此類問題沒有一個完整的代碼...

如果要擴展的Flex 3的MX ComboBox看看ComboBase.updateDisplayList()瞭解何時/何爲textInput的大小。

textInput.width已在ComboBase.updateDisplayList()中更新,因此您不應該在commitProperties()期間依賴此值。您可以嘗試將您的滾動位置邏輯移動到您的組件的末尾updateDisplayList()(此時應更新寬度)。

祝你好運!

+0

謝謝..在應用噸變體後,我已經得到它的工作。問題是在N'th築巢水平..所以,這是我錯過的原因: ) 謝謝你的時間。 – Antenka 2011-04-07 13:57:22