0

次のオブジェクトを解析する必要があります。

私が実装したコード (2) は部分的に機能します。(1) のコメントを参照してください。コードを修正する方法のヒントがあれば (2) いただければ幸いです。

私の目標は、ルート オブジェクトにエラー キーがあるときに parser_2 を呼び出すことです。
私はjqueryとアンダースコアを使用しています。


(1)

parser({
    "errors": ["errro1"], // it should be passed to parser_2
                          // with the code I implemented it works
    "children": {
        "points": {
            "errors": ["This value should not be blank.", "error2"]
        },
        "message": [], // it should be passed to parser
                       // with the code I implemented it does not work
                       // because it calls parser_2 instead of parser or nothing!
        "recipient_id": {
            "errors": ["This value should not be blank."]
        }
    }
});

(2)

parser = function (object) {
    _.each(object, function (object, name) {
        if (object.errors) {
            var inputElement = element.find('[name="' + name + '"]');
            //other code
        } else if ($.isArray(object)) {
            parser_2(object);
        } else if ($.isPlainObject(object)) {
            parser(object);
        }
    });
};
4

1 に答える 1

0

現在の呼び出しが最初の呼び出しか再帰呼び出しかを確認することで、ネストされたオブジェクトを持つルート オブジェクトを区別できます。

parser = function (object, firstCall) {
    _.each(object, function (object, name) {
        if (firstCall && $.isArray(object)) {
            parser_2(object);
        } else if (object.errors) {
            var inputElement = element.find('[name="' + name + '"]');
            //other code
        } else if ($.isPlainObject(object)) {
            parser(object);  // don't pass `true` here
        }
    });
};

次に、で呼び出しますparser(..., true)

ところで、入力オブジェクトとネストされたオブジェクトの両方に名前を付けるobjectと混乱します。

于 2012-08-29T12:55:15.650 に答える