1

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

我不确定是否需要其他东西..请问是否需要。提前致谢 :)

4

2 回答 2

3

这个问题并不明显,但通常super.commitProperties();在覆盖实现结束时而commitProperties()不是在开始时调用是一个好习惯。

如果您的块使属性无效,那么如果您在第一行//some stuff...调用,它将无法正确处理。super.commitProperties();

于 2011-04-01T16:35:40.930 回答
0

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

如果您正在扩展 Flex 3 MX ComboBox,请查看ComboBase.updateDisplayList()以了解 textInput 何时/如何调整大小。

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

祝你好运!

于 2011-04-04T09:51:32.963 回答