2011-04-01 4 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フレームワークを理解していません。 –

+0

応答とアドバイスをありがとう。しかし、残念ながら、私の問題を解決していません:( – Antenka

0

残念ながら、それは完全なコードなしでこの種の問題をデバッグすることはできません...

は、Flex 3 MXコンボボックスを拡張している場合は、にtextInputがサイズのときに/どのように理解するComboBase.updateDisplayList()を見てみましょう。

textInput.widthComboBase.updateDisplayList()に更新されていますので、commitProperties()の間にこの値に頼るべきではありません。スクロール位置ロジックをコンポーネントのupdateDisplayList()の末尾に移動してみてください(この時点で幅を更新する必要があります)。

幸運を祈る!

+0

ありがとう..変種のトンを適用した後、私はそれを働かせています。問題はN番目のネスティングレベルであった..これは私がそれを見逃す理由でした: ) 御時間ありがとうございます。 – Antenka

関連する問題