验证复杂Flex表单的最佳方法是什么?

时间:2009-12-08 20:45:57

标签: flex flex3 validation

我有一个Flex应用程序可以编辑一个中等复杂的对象,我想在编辑器的多个部分上进行一些客户端验证。编辑器是一组嵌套对象:

Form ->
    TabNavigator ->
        Tab1 ->
            Component1.1
            Component1.2
        Tab2 ->
            Component2.1
            Component2.2
    &c
    SubmitButton

结构相当紧密地回应数据模型,UI就是项目所需要的,所以如果我不需要,我不会太快地重组那里的类 - 时间也是一个问题。我想要做的是为每个Component*个实例设置验证器:

  • 显示相关UI元素的验证工具提示和UI提示
  • 当表单的任何部分无效时,禁用SubmitButton
  • (可选)提供足够的信息,我可以在表单中显示错误消息。

最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

创建表单时,创建一个数组以保存对表单中组件的所有验证器的引用。然后,当用户提交表单时,请检查所有输入是否符合您的标准。

if ((Validator.validateAll(validatorArr) as Array).length != 0){
  Alert.show("There are errors on the form.  Please correct before saving.", "Form Errors");}
else { /* do something*/}

答案 1 :(得分:1)

在处理了这种用例之后,我终于决定编写自己的Form子类,它将所有元素的验证作为内置行为。

这个想法从那里发展很长,但是如果你很好奇,请查看我在bitbucket上发布的开源项目

http://bitbucket.org/rpathsync/smartform

SmartForms(和SmartFormItems)使用XML“Descriptor”处理表单创建和验证等。这样做的主要原因是允许服务器生成的表单,因为我们经常处理客户端没有先验知识的对象(我们的服务器是可插拔的,因此需要服务器提供的表单描述符)

那里有比你想要的更多的代码,但是那个存储库中的验证相关类可能对你很有用。

答案 2 :(得分:0)

我认为您已经检查过mx.validators.Validator类,而且它是各种子类,如

  • CreditCardValidator
  • CurrencyValidator
  • DateValidator
  • EmailValidator
  • NumberValidator
  • PhoneNumberValidator
  • RegExpValidator
  • SocialSecurityValidator
  • StringValidator
  • ZipCodeValidator