在验证中对属性进行循环无法停止属性集

Looping over attributes in validation fails to stop set of attribute

本文关键字:属性 循环 无法停止 验证      更新时间:2023-09-26

通常在主干验证中,我有大量的if()语句,正如我在许多其他代码示例中看到的那样。验证在骨子里几乎是一场垃圾射击;然而,if()方式似乎有效。我想稍微清理一下代码,并编写了一些执行return error的代码,这应该会阻止主干保存属性,但它没有!

有效的旧代码

validate : function(attr){
    if(attr.firstName){
        var defaultValue = 'first name',
            value = attr.firstName.toLowerCase();
        if(value == defaultValue){
            return 'error';
        }
    }
}

不起作用的新代码

//My default strings from another place
MyApp.strings.defaults = {
    firstName : 'first name'
}
//Model Validate function
validate : function(attr){
    jQuery.each(attr, function(key, value){
        var defaultValue = MyApp.strings.defaults[key];
        if(defaultValue){
            defaultValue = jQuery.trim(defaultValue.toLowerCase());
            if(value == defaultValue){
                console.log(value, defaultValue); //fires, and outputs both as being the same
                return 'error';
            }
        }
    });
}

是否不允许在骨干验证中对属性进行循环?

您没有从validate方法返回任何值,而是从each()回调方法返回'error',而不是从validate 返回

//My default strings from another place
MyApp.strings.defaults = {
    firstName : 'first name'
}
//Model Validate function
validate : function(attr){
    var error;
    jQuery.each(attr, function(key, value){
        var defaultValue = MyApp.strings.defaults[key];
        if(defaultValue){
            defaultValue = jQuery.trim(defaultValue.toLowerCase());
            if(value.toLowerCase() == defaultValue){
                console.log(value, defaultValue); //fires, and outputs both as being the same
                error = 'error';
                return false;
            }
        }
    });
    return error;
}