【问题标题】:Force re-validation in jsViews if data-linked value doesn't change如果数据链接的值没有改变,则在 jsViews 中强制重新验证
【发布时间】:2013-11-30 23:15:03
【问题描述】:

我在使用带有验证功能的 jsViews(使用来自 jsviews.com/#samples 的代码)和 jQuery UI 自动完成时遇到了问题:
我在字段上有一个转换器(convertBack),它将输入的文本转换回基于字典的 GUID。如果字段为空 无效,则返回 null。

问题是 jsViews 没有注意到从一个空值到另一个的更新(即空白到无效,反之亦然)。我试图通过手动添加对 DOM onChange 的验证标签上的 refreshValidates() 的调用来解决此问题,但输入的任何无效值都会被删除。

问题:有没有办法在 jsViews 原生实现重新验证?

我更改了 jsViews 验证代码以允许检查显示的值:
[onAfterLink 结束]:它传递当前(显示的)值,而不仅仅是转换后的值(在这两种情况下都是 null):

 (...)
    tag.validate(tagCtx.args[0], tag.linkedElem.val()); // Validate initial data

【问题讨论】:

    标签: javascript validation jsviews


    【解决方案1】:

    tag.linkedElem 是您在其上进行双向数据绑定(和验证)的 HTML 元素。

    所以如果你只是想获取输入元素的当前值,是的,tag.linkedElem.val() 很好。

    在您的评论之后添加了其他回复:

    看看你的 jsfiddle:http://jsfiddle.net/w43hD/1/

    你正在使用

    data-link="{validate DictionaryValue inDictionary='dictionary' convert='fromGuid' convertBack='toGuid'}"

    这将在DictionaryValue 绑定到更改时触发验证。但是您将无效的用户输入字符串和空字符串都映射到相同的空字典值。所以当然从无效字符串切换到空字符串不会触发验证。

    您可以更改您的 getKey 转换器以将空字符串映射到 null 以外的其他内容,例如“” - 然后它工作。查看更新版本:http://jsfiddle.net/w43hD/2/

    【讨论】:

    • 谢谢,我相应地更新了我的问题 - 知道如何在不更改属性的情况下实现重新验证吗?
    • 我不确定我是否完全理解场景/问题。不确定您所说的空白/无效是什么意思。您可以在 jsfiddle 上放置一个简单的示例/示例吗?我看看能不能帮上忙……
    • 我不得不写一些代码,因为我无法粘贴原始代码,但这里是:jsfiddle.net/w43hD/1
    • 我在上面添加了对您的 jsfiddle 的响应。
    • 要理解的重要一点是验证是验证数据,而不是输入文本框中的用户值。这样,相同的验证代码与 UI 元素是否是选择、文本框、复选框、单选按钮、文本区域等无关。因此,验证将验证测试应用于数据(因此在您的 convertBack 之后)。因此,您必须允许无效数据。但是您不会向服务器发送无效数据,您会阻止提交,直到验证全部通过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多