针对远程对象的自定义验证器

时间:2010-10-20 15:33:45

标签: flex

我需要针对我们的数据库验证字段以验证唯一性。我似乎遇到的问题是,在我们从数据库中回复之前,验证器doValidation()退出。

在我们从DB听到之后,如何让验证器等待返回其有效负载?

或许可能是一个更好的问题(因为我认为第一个问题是不可能的),我怎样才能以不同的方式设置它,这样我就不需要等待,或者等待不会导致验证自动返回有效?

3 个答案:

答案 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'来检查这个标志的内容,并相应地完成它的工作。

它是间接的,但到目前为止似乎有效。