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

时间:2011-04-01 08:18:14

标签: flex custom-component relative measurement

我的问题在标题中有很多描述。只是一些细节..我正在创建一个自定义组件(基于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;
    }

我不确定是否还需要别的东西..如果是的话就问。 在此先感谢:)

2 个答案:

答案 0 :(得分:3)

问题并不明显,但在覆盖super.commitProperties();实施结束时而不是在开始时调用commitProperties()通常是一种很好的做法。

如果您的//some stuff...块无效,如果您在第一行调用super.commitProperties();,则无法正确处理。

答案 1 :(得分:0)

不幸的是,如果没有完整的代码,就无法调试此类问题......

如果您要扩展Flex 3 MX ComboBox,请查看ComboBase.updateDisplayList()以了解textInput的大小/时间。

textInput.width更新ComboBase.updateDisplayList(),因此您不应在commitProperties()期间依赖此值。您可以尝试将滚动位置逻辑移动到组件updateDisplayList()的末尾(此时应更新宽度)。

祝你好运!