【发布时间】:2011-04-28 03:12:07
【问题描述】:
我需要根据我们的数据库验证一个字段以验证唯一性。我似乎遇到的问题是验证器 doValidation() 在我们收到数据库回复之前就退出了。
如何让验证器等待返回其有效负载,直到我们收到来自 DB 的消息?
或者更好的问题可能是(因为我认为第一个问题是不可能的),我怎样才能以不同的方式设置它,这样我就不需要等待,或者等待不会导致验证自动返回有效吗?
【问题讨论】:
标签: apache-flex
我需要根据我们的数据库验证一个字段以验证唯一性。我似乎遇到的问题是验证器 doValidation() 在我们收到数据库回复之前就退出了。
如何让验证器等待返回其有效负载,直到我们收到来自 DB 的消息?
或者更好的问题可能是(因为我认为第一个问题是不可能的),我怎样才能以不同的方式设置它,这样我就不需要等待,或者等待不会导致验证自动返回有效吗?
【问题讨论】:
标签: apache-flex
如果您使用远程对象,您可以在远程声明中指定方法调用,并为结果调用分配一个函数。结果调用仅在远程服务器返回某些内容时运行,因此在您验证之前不会运行。
在所述结果函数调用(您必须创建)中进行验证调用,您应该会很好。你的代码应该是这样的:
<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 在其他地方被调用)。我也在下面留言。
【讨论】:
您正在尝试将异步过程(从数据库中获取数据)放入同步过程(依次检查所有验证器)。
这行不通……
您需要推出自己的验证器框架,或使用不同的方法来确定控件的合法性。
附:无论如何,MX 验证器都是垃圾!
【讨论】:
我设法做的,似乎大部分都有效。我不喜欢它,但它至少会针对远程源执行验证。
然后,我所做的是使用“keyUp”事件处理程序来分离数据库查找部分。同时,我设置了一个字符串变量来充当某种标志,将其标记为“正在处理”。当响应事件触发时,我会检查它的内容,或者清除标志,或者将其设置为某种其他错误。
然后,我创建了一个新的“EmptyStringValidator”,它将检查这个标志的内容,并相应地完成它的工作。
它是间接的,但到目前为止,它似乎有效。
【讨论】: