2011-04-01 71 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