Ошибка с 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] синтаксис вместо точечного синтаксиса.

Другие вопросы по тегам