ReferenceError:未定义函数名称

时间:2014-02-17 14:48:44

标签: javascript coffeescript

我收到ReferenceError: imageUpdate is not defined错误 我在下面提供了我的js代码:
我从coffeescript转换了这段代码。

imageUpdate = function() {
  alert("called");
  return $(".image_content img").dblclick(function() {
    var current_img, img_align, img_caption, img_data, img_width;
    img_data = $(this).attr("src");
    img_width = $(this).parent(".image_content")[0].style.width;
    img_width = img_width.substring(0, img_width.length - 1);
    img_align = $(this).parent(".image_content").attr("data-align");
    img_caption = $(this).siblings(".caption").text();
    current_img = $(this);
    return $.ajax({
      url: "/books/" + $("#book_id").val() + "/images_list/",
      data: {
        type: "edit",
        image_width: img_width,
        image_caption: img_caption,
        image_align: img_align
      },
      success: function(data) {
        $("#oebImageListModal .modal-dialog").html(data);
        getUpdateSelection(current_img);
        return $("#oebImageListModal").modal("show");
      }
    });
  });
};


getUpdateSelection = function(current_img) {
  $("#cancel_insert").click(function() {
    $("#oebImageListModal").modal("hide");
    return false;
  });
  return $("#update_picture").click(function() {
    var div_style, img_align, img_caption, upd_width;
    img_caption = $("#image_caption").val();
    img_align = $("#image_align").val();
    upd_width = $("#image_width").val();
    upd_width += "%";
    if (img_align === "Middle") {
      div_style = "margin:0 auto;";
    } else if (img_align === "Left") {
      div_style = "float:left;";
    } else {
      div_style = "float:right;";
    }
    current_img.parent(".image_content").attr("style", div_style);
    current_img.parent(".image_content")[0].style.width = upd_width;
    current_img.parent(".image_content").attr("data-align", img_align);
    current_img.siblings(".caption").text(img_caption);
    return $("#oebImageListModal").modal("hide");
  });
};

return $(window).load(function() {
  loadOebPart();
  imageUpdate();
});

1 个答案:

答案 0 :(得分:1)

我怀疑这些文件实际上是2个文件,imageUpdate在一个文件中定义,在另一个文件中调用。

CoffeeScript编译成一个匿名的自执行函数,代码为:

imageUpdate = -> alert '42'

编译为:

(function() {
    var imageUpdate;

    imageUpdate= function() {
        alert('42');
    };
})();

如您所见,imageUpdate是匿名函数的本地函数,并且未触及全局作用域。这是一个真正的优势,因为您永远不会意外地破坏全局window范围。

您可能希望将此功能明确指定给window,如下所示:

window.imageUpdate = -> alert '42'

或者,您可以使用-b编译器的coffee开关来禁用此顶级函数包装器。我会高度推荐这一点。