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"))

Так что, похоже, нет никаких проблем в этом безобразии.

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