Конфликт имен дубликатов переменных минификации в ASP.net MVC - PullRequest
0 голосов
/ 11 января 2019

Я получаю ошибку JavaScript из-за функциональности пакета ASP.net, код JS работает нормально до того, как его минимизируют, но не после.

Проблема: есть переменная isSelected, которая содержит логическое значение. Но когда код минимизируется, имя этой переменной сокращается до i. Но в методе $.each я создаю встроенную функцию с двумя параметрами, одним из которых является i.

Кажется, логика минимизации не смогла понять, что переименование переменной в i будет конфликтовать с кодом в моей встроенной функции.

Это ошибка системы связывания ASP.net? Если не так, как я рекомендую решить эту проблему, я обеспокоен тем, что, хотя я мог бы просто переименовать имя параметра, эта ошибка может возникнуть в других частях моего веб-приложения.

Оригинальный код JS

function ItemManagerUpdateUi(instance) {
var selectedValue = instance.ItemCombo.GetValue();
var selectedItem = ItemManagerGetSelectedItem(instance);

var isSelected = selectedValue != null;

var isNewSelected = selectedValue == -1;

var applyText = isNewSelected ? "Add" : "Apply";
var text = isNewSelected ? "" : instance.ItemCombo.GetText();

var highestSortOrder = 0;
$.each(instance.Items, function (i, e) {
    if (e.SortOrder > highestSortOrder)
        highestSortOrder = e.SortOrder;
});

var sortOrder = isNewSelected || !isSelected ? highestSortOrder + 1 : selectedItem.SortOrder;

$('#' + instance.EditPanelId).toggle(isSelected);
$('#' + instance.ApplyButtonId).val(applyText);
$('#' + instance.DeleteButtonId).toggle(!isNewSelected); 

var labelWidth = $(instance.ItemCombo.GetMainElement()).closest('.rbox-clearfix').find('.labelStyle').width() + 15;

$('#' + instance.ButtonPanelId).css('margin-left', labelWidth + 'px');

instance.TextControl.SetText(text);
instance.SortOrderControl.SetNumber(sortOrder);

$.each(instance.CustomFields, function (i, e) {

    var value = isNewSelected || !isSelected ? null : selectedItem[e.DataName];

    var dxControl = eval(e.ControlName);

    dxControl.SetValue(value);
    dxControl.SetIsValid(true);
});

if (!isNewSelected)
    $(instance.ItemCombo.GetMainElement()).find('.dms-combo-main-input').removeClass('newActivityItem');

instance.TextControl.SetIsValid(true);
}

код JS после минификации

function ItemManagerUpdateUi(n) {
var u = n.ItemCombo.GetValue(), 
f = ItemManagerGetSelectedItem(n), 
i = u != null, 
t = u == -1,
s = t ? "Add" : "Apply",
h = t ? "" : n.ItemCombo.GetText(),
r = 0,
e,
o;

$.each(n.Items, function(n, t) {
    t.SortOrder > r && (r = t.SortOrder)
});
e = t || !i ? r + 1 : f.SortOrder;
$("#" + n.EditPanelId).toggle(i);
$("#" + n.ApplyButtonId).val(s);
$("#" + n.DeleteButtonId).toggle(!t);
o = $(n.ItemCombo.GetMainElement()).closest(".rbox-clearfix").find(".labelStyle").width() + 15;
$("#" + n.ButtonPanelId).css("margin-left", o + "px");
n.TextControl.SetText(h);
n.SortOrderControl.SetNumber(e);
console.log(i);
$.each(n.CustomFields, function(i, e) {
    console.log(i);
    var value = t || !i ? null : f[e.DataName]
      , dxControl = eval(e.ControlName);
    dxControl.SetValue(value);
    dxControl.SetIsValid(!0)
});
t || $(n.ItemCombo.GetMainElement()).find(".dms-combo-main-input").removeClass("newActivityItem");
n.TextControl.SetIsValid(!0)
}

EDIT

После дальнейших исследований кажется, что удаление строки кода eval решает проблему. В настоящее время я изменил свой код, чтобы не использовать eval, хотя это все еще похоже на ошибку в процессе комплектации, по какой-то причине у вас странное поведение при использовании eval

...