Как удалить eval при создании данных поста из jqgrid colmodel - PullRequest
0 голосов
/ 05 сентября 2011

Код ниже используется для создания данных публикации из jqGrid colmondel и их публикации.Он использует eval (), так как имена столбцов и столбцов неизвестны.Как заменить eval () на что-то лучшее?

function gridValidate(elem, column, entity, eventText) {
    var i,
      row,
      postData = { _column: column, _entity: entity },
      colModel = $("#grid").jqGrid('getGridParam', 'colModel'),
      val;

  row = $(elem).closest('tr.jqgrow');
  postData._rowid = row.attr('id');
  for (i = 1; i < colModel.length; i = i + 1) {
            if (colModel[i].edittype !== "textarea") {
                switch (colModel[i].edittype) {
                    case "custom":
                        val = $('#' + postData._rowid + '_' + colModel[i].name).find("input").val();
                        break;

                    default:
                        val = $('#' + postData._rowid + '_' + colModel[i].name).val();
                        break;
                }
                eval('postData.' + colModel[i].name + '=val');
            }
        }
    }
    $.ajax('Grid/Validate', {
        data: postData,
        type: 'POST',
        } );
}

Ответы [ 2 ]

2 голосов
/ 05 сентября 2011

Заменить

eval('postData.' + colModel[i].name + '=val');

с:

postData[colModel[i].name] = val;

Это должно выполнить то, что вы хотите.

2 голосов
/ 05 сентября 2011

Вы можете использовать нотацию . и нотацию [] для получения и установки свойств объекта.

Если быть точным, obj.a === obj['a'].

[] также принимает переменную, если вы не используете ' (или "), тогда как запись . - нет.

Итак, в вашем случае:

postData[colModel[i].name] = val;
...