Coffeescript变量声明放在错误的地方

时间:2012-05-22 21:59:40

标签: javascript jquery ruby-on-rails coffeescript

Coffeescript将var指令放在错误的位置。我试过在功能上放置牙套但没有成功。这是coffeescript代码:

jQuery (->

  $(".item-scaffold-edit").live("click", (=>
    element = $(this)
    cont = element.data("cont")
    url = element.data("url")
    $.ajax(url,
      dataType: "html"
      success: (data, textStatus, jqXHR) ->
        $("##{cont}").html(data)
        $("##{cont}").data("url", url))))

  $(".item-menu").live("click", (=>
    element = $(this)
    cont = element.data("cont")
    url = element.data("url")
    if url isnt $("##{cont}").data("url")
      $.ajax(url,
        dataType: "html"
        success: (data, textStatus, jqXHR) ->
          $("##{cont}").html(data)
          $("##{cont}").data("url", url)
          $("#navbar-left li").removeClass("active")
          element.parent().addClass("active"))))
)

它生成了这个:

(function () {
  jQuery((function () {
    var _this = this;
    $(".item-scaffold-edit").live("click", (function () {
      var cont, element, url;
      element = $(_this);
      cont = element.data("cont");
      url = element.data("url");
      return $.ajax(url, {
        dataType: "html",
        success: function (data, textStatus, jqXHR) {
          $("#" + cont).html(data);
          return $("#" + cont).data("url", url);
        }
      });
    }));
    return $(".item-menu").live("click", (function () {
      var cont, element, url;
      element = $(_this);
      cont = element.data("cont");
      url = element.data("url");
      if (url !== $("#" + cont).data("url")) {
        return $.ajax(url, {
          dataType: "html",
          success: function (data, textStatus, jqXHR) {
            $("#" + cont).html(data);
            $("#" + cont).data("url", url);
            $("#navbar-left li").removeClass("active");
            return element.parent().addClass("active");
          }
        });
      }
    }));
  }));
}).call(this);

但它应该产生这个:

(function () {
  jQuery((function () {    
    $(".item-scaffold-edit").live("click", (function () {
      var cont, element, url;
      var _this = this;
      element = $(_this);
      cont = element.data("cont");
      url = element.data("url");
      return $.ajax(url, {
        dataType: "html",
        success: function (data, textStatus, jqXHR) {
          $("#" + cont).html(data);
          return $("#" + cont).data("url", url);
        }
      });
    }));
    return $(".item-menu").live("click", (function () {
      var cont, element, url;
      var _this = this;
      element = $(_this);
      cont = element.data("cont");
      url = element.data("url");
      if (url !== $("#" + cont).data("url")) {
        return $.ajax(url, {
          dataType: "html",
          success: function (data, textStatus, jqXHR) {
            $("#" + cont).html(data);
            $("#" + cont).data("url", url);
            $("#navbar-left li").removeClass("active");
            return element.parent().addClass("active");
          }
        });
      }
    }));
  }));
}).call(this);

任何人都知道我的coffeescript代码有什么问题????

1 个答案:

答案 0 :(得分:1)

据我所知,你现在有:

foo -> bar => element = $(this)

生成:

foo(function() {
  var _this = this;
  return bar(function() {
    var element;
    return element = $(_this);
  });
});

但您希望它能够生成:

foo(function() {
  return bar(function() {
    var _this = this;
    var element;
    return element = $(_this);
  });
});

这与此相同:

foo(function() {
  return bar(function() {
    var element;
    return element = $(this);
  });
});

您可以使用以下方式生成:

foo -> bar -> element = $(this)

例如,将=>更改为->。 “胖箭头”的文档是here,它解释了它与正常箭头的不同之处。