如何在显示容器时强制进行Flex验证

时间:2009-07-29 10:17:22

标签: flex validation flex3 creation cairngorm

我在视图堆栈中有一个带有视图的Flex 3应用程序,并且只能在请求时创建该视图。我已经为视图中的每个控件声明了验证器,并且我创建了一个名为checkAllValid()的方法,它运行Validator.validateAll()。当我实际使用控件(使用change或focusOut事件)时,这很有用,但是当视图首次显示给用户时,如何让checkAllValid()运行,以便立即显示无效的一次数据是否填充在控件中?

我已经尝试将调用放在视图本身的各种事件中(例如creationComplete,updateComplete,show,activate等),但是当我启动应用程序时它总是显示以下错误:

'指定property属性时必须指定source属性。'

我也尝试将视图上的creationPolicy设置为“all”,但这没有帮助。

某些验证程序仅在表单处于某种状态时才启用,但我已经通过注释掉所有验证程序将其排除为潜在问题,除了这个最简单的验证程序:

<mx:Array id="validators"><mx:StringValidator id="val_Address1" source="{Address1}" property="text" required="true" triggerEvent=""/></mx:Array>

checkAllValid()方法简单如下:

private function checkAllValid():void{              
        var validationErrors: Array = Validator.validateAll(validators);        
}

我也试过直接调用单个验证器而不是使用validateAll,结果是一样的。

请帮忙!必须有一种方法可以强制视图在显示时进行验证....

(顺便说一下,它在Cairngorm MVC框架中,我有数据绑定到控件)

1 个答案:

答案 0 :(得分:0)

知道了!我在另一个视图中添加了类似的验证器,它们运行良好。有什么区别?调用checkAllValid()的方法是在内部容器的creationComplete事件上调用的 - 而不是主视图组件。

所以最后它与验证本身无关 - 只是我没有完全理解创建顺序。

我会在这里留下问题,以防有人遇到与创作顺序类似的问题。