использовать один и тот же валидатор на нескольких элементах управления во Flex - PullRequest
2 голосов
/ 23 января 2009

Допустим, у меня есть программа проверки номера телефона во flex и два элемента управления TextInput для телефонных номеров. Я не хочу иметь два отдельных элемента управления валидатора, которые имеют одинаковые атрибуты ... но у каждого валидатора есть только один атрибут "источник". Как я могу использовать один и тот же валидатор для нескольких элементов управления? (или любое эквивалентное решение)

Ответы [ 2 ]

3 голосов
/ 23 января 2009

Не встроенный, но вы можете выполнить проверку программно, скажем, при отправке формы, или когда пользователь отключается от элемента управления и т. Д. Вот пример использования одного PhoneNumberValidator для проверки двух полей формы; проверка происходит при нажатии кнопки «Отправить»:

<mx:Script>
    <![CDATA[

        private function validatePhoneNumber(txt:TextInput):void
        {
            v.listener = txt;
            v.validate(txt.text);
        }

        private function btn_click():void
        {
            validatePhoneNumber(p1);
            validatePhoneNumber(p2);
        }

    ]]>
</mx:Script>

<mx:PhoneNumberValidator id="v" allowedFormatChars="()- .+" property="text" requiredFieldError="Required." wrongLengthError="Invalid length." invalidCharError="Invalid character." />

<mx:Form>
    <mx:FormItem label="Phone Number 1">
        <mx:TextInput id="p1" />    
    </mx:FormItem>
    <mx:FormItem label="Phone Number 2">
        <mx:TextInput id="p2" />    
    </mx:FormItem>
    <mx:FormItem>
        <mx:Button id="btn" label="Submit" click="btn_click()" />
    </mx:FormItem>
</mx:Form>

Надеюсь, это поможет!

1 голос
/ 24 ноября 2009

Шаги для воспроизведения:

  1. TextInput создает динамически

    textInputBox = new MyTextInput;
    textInputBox.restrict = “0-9.”;
    textInputBox.maxChars = 24;
    amountValidator = new NumberValidator();
    amountValidator.source = textInputBox;
    amountValidator.property = “text”;
    amountValidator.allowNegative = false;
    amountValidator.domain = “real”;
    amountValidator.precision = 4;
    amountValidator.required = false;
    amountValidator.maxValue = 999999999999.9999;
    amountValidator.trigger = textInputBox;
    amountValidator.triggerEvent = Event.CHANGE;
    amountValidator.addEventListener(ValidationResultEvent.VALID, amountValid);
    amountValidator.addEventListener(ValidationResultEvent.INVALID, amountInvalid);
    
    private function amountValid(event:ValidationResultEvent):void
    {
        valid = true;
        fieldsValidated = true;
    }
    
    private function amountInvalid(event:ValidationResultEvent):void
    {
        valid = false;
        fieldsValidated = true;
    }
    
  2. Как упомянуто в создании, когда мы превышаем лимит, он показывает ошибку «Моя граница красного цвета», и в то же время, если вы удаляете их клавишей DEL, когда она достигает заданного приемлемого предела, автоматически становится зелёным.
  3. Выйдите из поля и измените значения другого текстового ввода (это просто текстовый ввод, это форма, есть еще несколько элементов формы), затем вернитесь к значению превышенного текстового поля с помощью SHIFT + TABS и удалите дополнительные введенные числа, когда вы скоро придете к зеленому, ваше значение будет принято.
  4. Теперь снова введите больше значений, и теперь вы находитесь в зоне предупреждения, затем выйдите из поля и выполните несколько изменений в других элементах формы.
  5. Затем вернитесь к тексту, превышающему значение, поданному MOUSE CLICK, и начните удаление из DEL, даже если вы удалили дополнительные значения, но все же поля показывают, что вы находитесь в зоне предупреждения.

Фактические результаты: Даже если убрать дополнительные цифры, поле все еще будет красным

Ожидаемые результаты: если убрать дополнительные цифры, поле должно иметь нормальный статус.

Изображение этой проблемы можно посмотреть на Просмотр снимка экрана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...