2012-08-29 81 views
3

我需要在表单中显示错误。我该如何处理看起来像这样的对象

错误可以追加到输入名称表单中,以防在儿童中定义的错误,这是常见的情况(1)。

但可能发生的错误是在json对象(2)的根节点中定义的。
在这种情况下,它应该被附加到formElement。

以下代码(3)适用于案例(1),但不适用于案例(2)。

我应该如何修改它以使它在两种情况下都能正常工作?
P.S .:我使用下划线和jQuery。


(1)

var xhrObj_1 = JSON.parse('{ "children":{"points":{"errors":["This value should not be blank."]},"message":[],"recipient_id":{"errors":["This value should not be blank."]}}}'); 

(2)

var xhrObj_2 = JSON.parse('{ "errors":["This form should not be …."], "children":{"points":{"errors":["This value should not be blank."]},"message":[],"recipient_id":{"errors":["This value should not be blank."]}}}'); 

(3)

var parser = function (object) { 
    _.each(object, function (xhrObject, name) { 
     console.log(xhrObject) 

     if (xhrObject.errors) { 
      var inputElement = element.find('[name="' + name + '"]'); 

      inputElement.closest('.control-group') 
       .addClass('error'); 

      parserError(xhrObject.errors, inputElement); 

     } else { 
      parser(xhrObject); // it is ok for xhrObj_1 
           // it fails for xhrObj_2 
     } 
    }); 
}; 

// example with xhrObj_2 which does not work 
parser({ 
    "errors": ["errro1"], 
    "children": { 
     "points": { 
      "errors": ["This value should not be blank."] 
     }, 
     "message": [], 
     "recipient_id": { 
      "errors": ["This value should not be blank."] 
     } 
    } 
}); 
+0

根级别中的'name'是什么? – Bergi

回答

0

您应该开始顶级递归:

var xhr = JSON.parse("…"); 

(function recurse(obj, name) { 
    if (obj.errors) { 
     var inputElement = element.find('[name="' + name + '"]'); 
     inputElement.closest('.control-group').addClass('error'); 
     parserError(obj.errors, inputElement); 
    } 
    if ("children" in obj) 
     for (var prop in obj.children) 
      recurse(obj.children[prop], prop); 
})(xhr, "top"); 
相关问题