我的问题在标题中有很多描述。只是一些细节..我正在创建一个自定义组件(基于ComboBox)并覆盖一些基本方法。最近我发现当我设置宽度为百分比而不是固定宽度时,它会很奇怪。它倾向于不断调用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;
}
我不确定是否还需要别的东西..如果是的话就问。 在此先感谢:)
答案 0 :(得分:3)
问题并不明显,但在覆盖super.commitProperties();
实施结束时而不是在开始时调用commitProperties()
通常是一种很好的做法。
如果您的//some stuff...
块无效,如果您在第一行调用super.commitProperties();
,则无法正确处理。
答案 1 :(得分:0)
不幸的是,如果没有完整的代码,就无法调试此类问题......
如果您要扩展Flex 3 MX ComboBox,请查看ComboBase.updateDisplayList()
以了解textInput的大小/时间。
textInput.width
更新ComboBase.updateDisplayList()
,因此您不应在commitProperties()
期间依赖此值。您可以尝试将滚动位置逻辑移动到组件updateDisplayList()
的末尾(此时应更新宽度)。