如果条件不按预期工作,则使用ember验证

时间:2013-12-18 20:10:25

标签: ember.js

我正在使用dockyard / ember-validation来验证控制器属性,但我还没有能够像我预期的那样工作。所以我基本上在复选框上切换效果,并且我已经定义了2个验证规则,当用户在复选框之间切换时,只应执行/验证其中一个。 我的验证规则定义为:

validations: {

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

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

以下是问题的jsbin:http://jsbin.com/ODAmukOM/1/

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

谢谢, DEE

1 个答案:

答案 0 :(得分:0)

您正在添加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),但验证不会再次发生。此时,您需要手动运行验证以再次检查该验证。祝你好运