我收到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();
});
答案 0 :(得分:1)
我怀疑这些文件实际上是2个文件,imageUpdate
在一个文件中定义,在另一个文件中调用。
CoffeeScript编译成一个匿名的自执行函数,代码为:
imageUpdate = -> alert '42'
编译为:
(function() {
var imageUpdate;
imageUpdate= function() {
alert('42');
};
})();
如您所见,imageUpdate
是匿名函数的本地函数,并且未触及全局作用域。这是一个真正的优势,因为您永远不会意外地破坏全局window
范围。
您可能希望将此功能明确指定给window
,如下所示:
window.imageUpdate = -> alert '42'
或者,您可以使用-b
编译器的coffee
开关来禁用此顶级函数包装器。我会高度推荐这一点。