Uglifier разрушает мою JS?
Я использую рельсы, uglifier и только начал использовать coffeescript. Мой кофейный скрипт для обработки завершения ajax:
handleAjaxComplete = (xhr, response, status) ->
myFeatherBox.close() if myFeatherBox?
if $(xhr.target).hasClass "crud_create"
#creation button hit
myFeatherBox = $.featherlight response.responseText, afterOpen: ->
$('form#frm_create').validate()
$('#frm_create input[type!=hidden]').first().focus()
return
else #etc.
Это становится следующим javascript:
handleAjaxComplete = function(xhr, response, status) {
var new_aka_song_id;
if (myFeatherBox != null) {
myFeatherBox.close();
}
if ($(xhr.target).hasClass("crud_create")) {
myFeatherBox = $.featherlight(response.responseText, {
afterOpen: function() {
$('form#frm_create').validate();
$('#frm_create input[type!=hidden]').first().focus();
}
});
} else //etc.
Но потом, когда я открываю размещенную страницу (она на героку), myFeatherBox.close()
кажется, не работает. Я проверил Uglified код, и он, кажется, стал:
a=function(t,s) {
var o;
if(null!=h&&h.close(),$(t.target).hasClass("crud_create"))
h=$.featherlight(s.responseText,{
afterOpen:function(){
$("form#frm_create").validate(),
$("#frm_create input[type!=hidden]").first().focus()
}
});
else //etc.
(Я добавил несколько пробелов, где я не думаю, что будет важно сделать его немного более читабельным).
Мое беспокойство связано с условием в третьей строке увеличенного кода. Я прав, что это нарушает то, что я пытаюсь сделать? Если так, как я могу исправить мой сценарий кофе, чтобы глянец играл хорошо?
1 ответ
a, b
в этом контексте выражение, значением которого является значение b
(см. оператор запятой). Вот почему тест Uglified
if(null!=h&&h.close(),$(t.target).hasClass("crud_create"))
такой же как
null!=h && h.close();
if ($(t.target).hasClass("crud_create"))
что эквивалентно, из -за поведения короткого замыкания&&
, чтобы
if (null!=h) h.close();
if ($(t.target).hasClass("crud_create"))
Так что, похоже, нет никаких проблем в этом безобразии.