CommitProperties в пользовательском компоненте не работает с шириной в процентах - PullRequest
1 голос
/ 01 апреля 2011

Моя проблема в значительной степени описана в заголовке. Просто несколько деталей ... Я создаю пользовательский компонент (на основе 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 ]

3 голосов
/ 01 апреля 2011

Проблема не очевидна, но обычно рекомендуется вызывать super.commitProperties(); в конце переопределенной реализации commitProperties(), а не в начале.

Если ваш блок //some stuff... делает недействительными свойстване будет обработан правильно, если вы позвонили super.commitProperties(); в первой строке.

0 голосов
/ 04 апреля 2011

К сожалению, отладка такого рода проблем невозможна без полного кода ...

Если вы расширяете Flex 3 MX ComboBox, взгляните на ComboBase.updateDisplayList(), чтобы понять, когда / как размер textInput.

textInput.width обновляется в ComboBase.updateDisplayList(), поэтому вы не должны полагаться на это значение во время commitProperties(). Вы можете попробовать переместить логику положения прокрутки в конец updateDisplayList() вашего компонента (в этот момент ширина должна быть обновлена).

Удачи!

...