自定义组件中的CommitProperties不适用于百分比宽度

我的问题在标题中有很多描述。只是一些细节..我正在创建一个自定义组件(基于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;
    }
我不确定是否还需要其他东西......如果是的话,请问。 提前致谢 :)     
已邀请:
这个问题并不明显,但在被覆盖的
commitProperties()
实施结束时而不是在开始时调用
super.commitProperties();
通常是一种好习惯。 如果你的
//some stuff...
块使属性无效,如果在第一行调用
super.commitProperties();
,则无法正确处理。     
不幸的是,没有完整的代码就不可能调试这类问题...... 如果您正在扩展Flex 3 MX ComboBox,请查看
ComboBase.updateDisplayList()
以了解textInput的大小/时间。
textInput.width
ComboBase.updateDisplayList()
中更新,因此在
commitProperties()
期间不应该依赖此值。您可以尝试将滚动位置逻辑移动到组件的
updateDisplayList()
的末尾(此时应更新宽度)。 祝好运!     

要回复问题请先登录注册