Action Script 3 NumericStepper 验证空值

Posted

技术标签:

【中文标题】Action Script 3 NumericStepper 验证空值【英文标题】:Action Script 3 NumericStepper validation for empty value 【发布时间】:2015-10-13 17:30:04 【问题描述】:

我有一个简单的 NumericStepper,如下所示:

<mx:NumericStepper id="nsPort"
minimum="0"
maximum="65535"
stepSize="1"
value="PORT_DEFAULT"/>

我为它写了一个验证器(它没有像我预期的那样工作):

<mx:NumberValidator
required="true"
source="nsPort"
property="value"/>

但是,每次我没有在 NumericStepper 中输入任何内容时,它都会传递零,而不是 NULL 或其他东西,这是......嗯......一个有效的值。我怀疑这是故意的。那么,如何使 NumbericStepper 的空白值无效? 请注意,我仅限于版本 3 的动作脚本。

【问题讨论】:

【参考方案1】:

来自https://flexscript.wordpress.com/2008/09/22/flex-creating-custom-validators/ 的示例代码库,稍作修改:

package flexScript

     import mx.validators.ValidationResult;
     import mx.validators.Validator;

 //Class should extend mx.validators.Validator
 public class NumericStepperValidator extends Validator 

        public function NumericStepperValidator() 
            // Call base class constructor.
            super();
        

        // Class should override the doValidation() method.
        //doValidation method should accept an Object type parameter
        override protected function doValidation(value:Object):Array 
            // create an array to return.
            var ValidatorResults:Array = new Array();
            // Call base class doValidation().
            ValidatorResults = super.doValidation(value);       
            // Return if there are errors.
            if (ValidatorResults.length > 0)
                return ValidatorResults;

            if (String(value).length == 0)
             return ValidatorResults;
            if ( value == 0)//as your required.
             return ValidatorResults;

               var RegPattern:RegExp = /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/; //Change to your customize regExpression
            var a:Array = RegPattern.exec(String(value));
               if (a == null)
               
                ValidatorResults.push(new ValidationResult(true, null, "NumbericStepper Error","You must enter an Number"));
                return ValidatorResults;
               
             return ValidatorResults;
        
    


<flexScript:NumbericStepperValidator source="nsPort" property="number"/>

【讨论】:

自定义验证器是一件好事,但捕获值 == 0 不是我需要的......零值本身是可以的。我真正想知道的是这个零是由用户输入还是由 NumericStepper 作为未装箱的 null 返回的。或者只是得到真正的装箱值...... “unboxes null”场景是突破FLEX组件生命周期,例如在渲染box组件时尝试访问它的值,你应该首先验证组件自身实例为null,然后再到获取它的值;

以上是关于Action Script 3 NumericStepper 验证空值的主要内容,如果未能解决你的问题,请参考以下文章

Action Script 3. 角色移动时改变动画

Action Script 3. 如何播放一次动画?

使用 Action Script 3.0 滚动多个文本字段

带 Loader 的外部游戏在 Flash、Action Script 3 中不起作用

Action Script 3. 如何在 Flash 中访问 Movie Clip 中的按钮?

如何在 Flash CC/Action Script 3.0 中创建自定义 MovieClip 边界?