【问题标题】:custom validator against remote object针对远程对象的自定义验证器
【发布时间】:2011-04-28 03:12:07
【问题描述】:

我需要根据我们的数据库验证一个字段以验证唯一性。我似乎遇到的问题是验证器 doValidation() 在我们收到数据库回复之前就退出了。

如何让验证器等待返回其有效负载,直到我们收到来自 DB 的消息?

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

【问题讨论】:

    标签: apache-flex


    【解决方案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 在其他地方被调用)。我也在下面留言。

    【讨论】:

    • 是的...我希望能够完全封装整个想法IN验证器.....
    • 不确定你想如何处理它。你是说你想让你的验证器与你的数据库调用分开运行吗?从技术上讲,这就是您首先要做的事情,但是除非您将数据绑定到某些东西,否则没有处理更新的好方法。如果你是,那么你可以更新返回调用的结果,但让你的验证函数运行而不受干扰。我需要更多信息来弄清楚如何最好地解决这个问题,以及你想要做什么以及为什么。
    • 我只有一系列已经在运行的验证器...我宁愿这样做,以便这个验证器完全封装逻辑,而不是在这里放一些部分...和那里的其他人......这也将使所有验证保持相似,而不是这些验证方式,并且通过完全不同的机制进行验证。
    【解决方案2】:

    您正在尝试将异步过程(从数据库中获取数据)放入同步过程(依次检查所有验证器)。

    这行不通……

    您需要推出自己的验证器框架,或使用不同的方法来确定控件的合法性。

    附:无论如何,MX 验证器都是垃圾!

    【讨论】:

    • 是吗?它们似乎比我在经典 ASP 中可以访问的内容有了很大的改进:D。有什么更好的方法?你能指出一个更好的验证解决方案吗?
    • 我认为没有好的第三方解决方案。大多数自己滚动的人都保持关闭状态。作为一个为什么它们不那么好的示例,尝试通过将输入与另一个输入进行比较来验证输入......这就是它开始下降的地方。
    • 嗯...我实际上已经为该问题使用自定义 mx 验证器取得了很好的成功。将“电子邮件”与“重新输入的电子邮件”进行比较,以确保它们相同。不知道我在哪里找到它,但到目前为止,它的效果很好。就我自己的做法而言,我看不出在这种情况下这对我有什么帮助,因为我仍然必须解决手头的问题,即如何对远程异步源进行验证。
    • 是的,现在尝试有两个日期字段,其中一个必须在另一个之前,另一个必须在第一个之后。现在以一种好的方式来做......这并不容易。
    • 自己动手的关键在于,你必须这么做。 MX 验证器是同步的,您需要创建一个异步的验证器框架,您需要自己推出。
    【解决方案3】:

    我设法做的,似乎大部分都有效。我不喜欢它,但它至少会针对远程源执行验证。

    然后,我所做的是使用“keyUp”事件处理程序来分离数据库查找部分。同时,我设置了一个字符串变量来充当某种标志,将其标记为“正在处理”。当响应事件触发时,我会检查它的内容,或者清除标志,或者将其设置为某种其他错误。

    然后,我创建了一个新的“EmptyStringValidator”,它将检查这个标志的内容,并相应地完成它的工作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      相关资源
      最近更新 更多