Ошибка с eval при минификации
Я сталкиваюсь с ошибкой при минимизации скриптов с использованием ajaxmin, которая содержит 'eval'. В приведенном ниже заявлении я получаю сообщение об ошибке "Сетка не определена". Переменная 'grid' была изменена на другое имя после минимизации. Я решил эту проблему, сохраняя объект сетки в окне, как 'window.grid'. Но есть ли другие способы решить эту проблему?
$(form).html($("#" + this._gridID + "_bulkEditTemplate #" + colName + "_bulkEdit").html());
$(target).append(form);
var grid = $find(this._gridID);
var optionsObj = eval("grid.jsonModeMgr._jsonDataAndOption." + colName + "_Options");
$("#" + this._gridID + " #" + colName).html($($("#" + this._gridID + "_bulkEditTemplate").tmpl(optionsObj).find('#' + colName + ' option')));
var editElement = $("#" + this._gridID + " #" + colName);
$(editElement).val(this.currentCellValue == null ? "" : this.currentCellValue);
$(editElement).val(this.currentCellValue).focus();
$(editElement)[0].focus();
Спасибо
1 ответ
Решение
В общем, вам следует избегать eval()
когда возможно. Вы можете заменить это eval()
линия:
var optionsObj = eval("grid.jsonModeMgr._jsonDataAndOption." + colName + "_Options");
с этим:
var optionsObj = grid.jsonModeMgr._jsonDataAndOption[colName + "_Options"];
Чтобы получить доступ к свойству по вычисляемому имени строки или строке, содержащейся в переменной, вы можете использовать [string here]
синтаксис вместо точечного синтаксиса.