【发布时间】:2012-06-10 17:18:17
【问题描述】:
我试图通过测试某个对象是否不是 undefined 来为formset 构造错误消息,如果它不是undefined,那么我最终会填充它带有该错误消息。主要问题是我必须验证每个嵌套对象是否为undefined,这会导致一些非常丑陋的代码。示例如下:
errorsForField: function(fieldName, formsetName, formNumber) {
if (typeof this.model.errors != 'undefined'){
var fieldError = document.createElement('span');
$(fieldError).addClass('field-error');
// THE FOLLOWING LINE THROWS ERROR.
if (formsetName && _.isUndefined(this.model.errors[formsetName][fieldName]) != true) {
$(fieldError).text(this.model.errors[formsetname][fieldName]);
} else if (typeof this.model.errors[fieldName] != "undefined"){
$(fieldError).text(this.model.errors[fieldName]);
}
this.errors[fieldName] = fieldError.outerHTML;
return fieldError.outerHTML;
}
return false;
},
我收到一条错误消息,指出我无法确定 undefined object 的 [fieldName] this.model.errors[formsetName]。换句话说,我必须首先确定this.model.errors[formsetName] 是否为空,然后然后 测试[fieldname] 是否为undefined。
这似乎是一个非常麻烦的解决方案。有什么改变这个的建议吗?
【问题讨论】:
-
我从未在纯 JavaScript 中看到过解决此问题的方法。顺便说一下,这被称为“安全导航”或“吸收空值”。归结为 JS 的 Coffeescript 就有这个功能。您可能想查看它们的实现以获取灵感;它似乎使用了很多三元运算符。 overview of Coffeescript 有一个例子。在该页面上搜索“吸收空值”
标签: javascript object properties