From 441d17567fad8b94665c8897361995400f861d3b Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 22 Feb 2022 15:46:00 +0800 Subject: [PATCH] `serializeFormToObject ` Supports multi-level depth objects. Resolve #11640 --- .../jquery/jquery-extensions.js | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js index 532aa1af71..bde4937822 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js @@ -126,20 +126,29 @@ }); } + var getNames = function (index, variable) { + var name = ''; + for (var i = 0; i <= index; i++) { + if (i == 0) { + name = variable + '[' + i + ']' + } else { + name += '][' + variable + '[' + i + ']' + } + } + return name; + } + data.map(function (x) { - //TODO: improve mapping. it only supports one level deep object. var names = x.name.split("."); - if (names.length === 1 && !obj[names[0]]) { - obj[names[0]] = x.value; - } - else if (names.length === 2) { - if (!obj[names[0]]) { - obj[names[0]] = {}; - } - if (!obj[names[0]][names[1]]) { - obj[names[0]][names[1]] = x.value; + for (var i = 0; i < names.length; i++) { + if (eval('!obj[' + getNames(i, 'names') + ']')) { + eval('obj[' + getNames(i, 'names') + '] = {}'); } } + + if ($.isEmptyObject(eval('obj[' + getNames(names.length - 1, 'names') + ']'))) { + eval('obj[' + getNames(names.length - 1, 'names') + '] = x.value'); + } }); return obj;