【问题标题】:ember validation with if condition not working as expected如果条件未按预期工作的 ember 验证
【发布时间】:2014-01-07 04:20:33
【问题描述】:

我正在使用 dockyard/ember-validation 来验证控制器属性,但我无法让它按预期工作。所以我基本上对复选框有切换效果,并且我定义了 2 个验证规则,当用户在复选框之间切换时,只有其中一个应该被执行/验证。 我的验证规则定义为:

validations: {

            "instructions": {
                format: {
                    if: 'inlineSource',
                    'with': /^(?!\s*$).+/
                }
            },
            "externalSourceValue": {
                format: {
                    if: 'externalSource',
                    'with': /^(?!\s*$).+/
                }
            }
        }

这里要么 inlineSource 为真,要么 externalSource 为真,但两者永远不会同时为真。我希望只执行一个验证规则,但似乎两者都在运行,而忽略了那里的 if 条件。

这里是问题的 jsbin:http://jsbin.com/ODAmukOM/1/

按照以下步骤操作: 1) 点击外部网站 2) 将输入字段值设置为空 3) 点击我指定的内容 4) 验证将控制器设置为无效状态

谢谢, 深

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    您正在添加 2 个格式验证,

    如果inlineSource && /^(?!\s*$).+/

    说明有效

    真的你的逻辑需要更像这样

    "instructions": {
       format: {
          if:  function(object, validator) {
            console.log('inlineSource',object);
            if(!object.get('inlineSource')){
              return (object.get('instruction') || '').match(/^(?!\s*$).+/);
            }
            return true;
          }
        }
     } 
    

    不幸的是,验证仅在您更改属性时运行,因此您更改instruction 验证运行并且它无效,然后您切换(翻转inlineSource),但验证不会再次发生。此时,您需要手动运行验证以再次检查该验证。祝你好运

    【讨论】:

    • 我正在使用 disableSave 函数手动运行验证,该函数同时观察 inlineSource 和 externalSource。但我仍然无法让它工作!
    猜你喜欢
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 2013-01-21
    • 1970-01-01
    • 2021-12-13
    • 2018-01-27
    • 2012-09-28
    相关资源
    最近更新 更多