如果我有一个defaults
对象看起来像这样的 Backbone 模型:
defaults {
"id" : null
"name" : null,
"url" : null,
"admin" : {
"id" : null,
"email" : null
}
}
有没有推荐的方法来验证类似的东西的存在admin[id]
?我们已经编写了一个尝试的方法,但是它不断地吐出null
值(尤其是在创建新模型时),或者如果从我们的数据库中获取具有null
预期需要的值的数据(我们将这个应用程序放在现有数据)。
这是我们验证是否存在必填字段的方法:
validatePresence = function(requiredAttrs, submittedAttrs, errorsArr) {
var regex = new RegExp(/[a-zA-Z0-9_]+|(?=\[\])/g),
attrStack = null,
val = null,
name = null;
for( var l = requiredAttrs.length; --l >= 0; ) {
attrStack = requiredAttrs[l].match(regex);
val = submittedAttrs[attrStack.shift()];
while(attrStack.length > 0) {
console.log(requiredAttrs[l]);
val = val[attrStack.shift()];
}
if( val === undefined ) { continue; }
name = requiredAttrs[l];
if( val === null || !val.length) {
if( !errorsArr[name] ) {
errorsArr[name] = [];
}
errorsArr[name].push("Oops, this can't be empty");
}
}
return errorsArr;
}
这是我们从 BB 模型中调用它的方式:
validate: function(attrs) {
var requiredAttributes = ["name","admin[id]"],
errors = {};
errors = validatePresence(requiredAttributes, attrs, errors);
}
该方法喜欢扼杀诸如“admin [id]”之类的东西。任何帮助表示赞赏。