【问题标题】:CommitProperties in a custom component doesn't work with percent width自定义组件中的 CommitProperties 不适用于百分比宽度
【发布时间】:2011-07-27 12:20:18
【问题描述】:

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

我不确定是否还需要其他东西……请问是否需要。 在此先感谢:)

【问题讨论】:

    标签: apache-flex custom-component measurement


    【解决方案1】:

    问题并不明显,但通常最好在覆盖的 commitProperties() 实现结束时而不是在开始时调用 super.commitProperties();

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

    【讨论】:

    • 感谢您的回复和建议。但不幸的是,它没有解决我的问题:(
    【解决方案2】:

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

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

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

    祝你好运!

    【讨论】:

    • 谢谢 .. 在应用了大量变体之后,我已经开始工作了。问题出在第 N 个嵌套级别 .. 所以,这是我错过的原因 :) 感谢您的时间。
    猜你喜欢
    • 2011-01-29
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多