【发布时间】:2014-07-06 02:16:55
【问题描述】:
我正在使用 dropzonejs-rails gem 并合并一个用于文件管理的 dropzone。我的上传工作很好,但删除文件让我很痛苦。我无法让侦听器附加,以便 ajax 访问我的服务器。我的强项是 Ruby on Rails,我只有有限的 javascript 经验,所以这可能是这里真正的问题......但也许有人可以帮助我解决我 [可耻] 2 天的斗争。
文件上传后,Dropzone 会在 dropzone 中正确显示 previewTemplate,addRemoveLinks: true 会在缩略图预览中显示删除链接。我的目标是,在用户单击文件的删除链接时,应向服务器发送请求以删除该文件。我从博客、dropzone 常见问题解答、github 问题等中尝试了许多不同的方法。我最接近成功的是:https://github.com/enyo/dropzone/issues/456。
我尝试在成功上传后向.dz-remove 按钮添加事件监听器。此侦听器旨在通过 ajax 请求访问服务器以删除文件。目前,单击预览缩略图上的删除链接只会从 dropzone 中删除预览缩略图,但不会使用 ajax 访问服务器。这是javascript代码:
// Listening for Dropzone upload success
// imageDropzone is the camelized version of the dropzone form's id.
Dropzone.options.imageDropzone = {
init: function() {
this.on("success", function(file, response, event) {
// Loads image ID to the file preview for use w/deletion
var elem;
elem = document.createElement('input');
elem.setAttribute("name", "id");
elem.setAttribute("value", response["id"]);
elem.setAttribute("type", "hidden");
file.previewTemplate.appendChild(elem);
// Add the listener to the dz-remove class link
$('.dz-remove').on("click", (function(e) {
var imageId, imageToken, _this;
_this = this;
e.preventDefault();
e.stopPropagation();
imageId = $(_this).parent().find('[name="id"]').val();
console.log(_this);
console.log(imageId);
console.log(imageToken);
$.ajax({
url: "/remove_image",
type: "DELETE",
dataType: "script",
data: {
id: imageId
}
});
return false;
}), false);
});
}
};
因此,它应该找到与单击的删除链接相关的文件信息,并将该信息发送到服务器以进行删除请求。任何人成功地使用 Javascript 为 Ruby on Rails (Rails 4) 应用程序获得了这种方法(或更好的方法??)?
如果您需要任何其他信息或代码,请告诉我。谢谢!
【问题讨论】:
标签: javascript jquery ruby-on-rails ajax dropzone.js