我需要针对我们的数据库验证字段以验证唯一性。我似乎遇到的问题是,在我们从数据库中回复之前,验证器doValidation()退出。
在我们从DB听到之后,如何让验证器等待返回其有效负载?
或许可能是一个更好的问题(因为我认为第一个问题是不可能的),我怎样才能以不同的方式设置它,这样我就不需要等待,或者等待不会导致验证自动返回有效?
答案 0 :(得分:1)
如果您正在使用远程对象,则可以在远程声明中指定方法调用,并为结果调用分配函数。结果调用仅在远程服务器返回某些内容时运行,因此在验证之前不会运行。
在所述结果函数调用中进行验证调用(您必须创建)并且您应该是好的。你的代码应该是这样的:
<s:RemoteObject id="employeeService"
destination="ColdFusion"
source="f4iaw100.remoteData.employeeData"
endpoint="http://adobetes.com/flex2gateway/"
result="employeeService_resultHandler(event)"/>
**<s:method name="dataCheckCall" result="dataCheckResult(event)"/>**
<s:RemoteObject />
在你的剧本中:
function protected dataCheckResult(event:ResultEvent):void {
**doValidate();**
}
编辑:只要您调用“dataCheckCall”,该方法就会开始运行。无论出于何种原因,如果你想在你的验证器中调用它,你可以这样做,然后dataCheckResult将在它返回时带有它的有效负载(假装在其他地方调用doValidate)。我也在下面留言。
答案 1 :(得分:0)
您正在尝试使异步进程(从数据库中获取数据)适应同步进程(依次检查所有验证程序)。
这不起作用......
您需要推出自己的验证程序框架,或使用其他方法来确定控件的合法性。
P.S。 MX验证器无论如何都是垃圾!
答案 2 :(得分:0)
我设法做的事情似乎很有用。我不喜欢它,但它至少会对远程源执行验证。
我所做的就是使用'keyUp'事件处理程序来分离数据库查找部分。同时,我设置了一个字符串变量来充当某种Flag,它将被标记为'processing'。当响应事件触发时,我将检查其内容,并清除该标志,或将其设置为某种其他错误。
然后,我创建了一个新的'EmptyStringValidator'来检查这个标志的内容,并相应地完成它的工作。
它是间接的,但到目前为止似乎有效。