从json数据

时间:2015-12-07 15:53:44

标签: jquery arrays json validation object

我有一个构建的js表单构建器函数,它根据外部json文件中的数据输出表单元素。在json数据中,它还包含验证规则和消息的数据。

示例数据:

"rows": [
[{
    "Name": "FirstName",
    "Description": "Enter your name",
    "IsRequired": true,
    "Datatype": "string",
    "Maxlength": 255,
    "InputLabel": "Name",
    "InputInitialValue": "",
    "InputSourceChannel": "constant",
    "FieldWidth": 170,
    "PlaceholderText": "Joe Blogs",
    "ValidationMessage": "Please provide your name"
}]
]

我希望从子文件中的数据生成jQuery验证所使用的规则和消息的变量,并根据json数据中设置的值有条件地添加验证方法,如电子邮件,最大长度等。

例如,我想将email: true方法添加到电子邮件输入字段的规则以及required: true方法(应该设置)。

示例预期结果

    FirstName: {
        required: true
      },
      LastName: {
        required: true
      },
      Title: {
        required: true,
        max-length: 50
      },
      Company: {
        required: true
      },
      Email: {
        required: true,
        email: true
      },
      Phone: {
        required: true, 
        phone: true
      }

演示

http://jsfiddle.net/onebitrocket/6d73jyen/

如果zDatatype:email`匹配数组中的值,则添加email: true方法需要if \ else语句。 如果我想添加一些额外的方法,比如maxlength,那么if语句可能会有点混乱。

是否有方法可以将所有必需的方法连接到变量中,然后在对象中调用变量?

我认为我理解所有条件语句都需要在js

之外完成

由于

1 个答案:

答案 0 :(得分:0)

修复了使用$.extend从每个validationRule类型/ required的唯一对象构造新对象

https://stackoverflow.com/a/10892275/1376820

var validationRulesRequired = {},
    validationRulesType = {},
    validationRules;

$.each(jsonData.rows, function(key, value) {
    $.each(value, function(ikey, ivalue) {

        // generate validation messages
        if (ivalue.ValidationMessage) {
            validationMessages[ivalue.Name] = ivalue.ValidationMessage;
        }

        // generate validation rules
        if (ivalue.IsRequired) {
            var validationInputTypes = ['email', 'phone'];

            if ($.inArray(ivalue.Datatype, validationInputTypes) > -1) {
                validationRulesType[ivalue.Name] = {
                    [ivalue.Datatype]: true,
                };
            }
            validationRulesRequired[ivalue.Name] = {
                ['required']: true,
            };
        }
    });
});
var validationRules = $.extend(true, {}, validationRulesRequired, validationRulesType);

console.log(validationRules);

查看更新的小提琴 http://jsfiddle.net/onebitrocket/6d73jyen/6/