我正在构建自定义 Dropzone.js:http://www.dropzonejs.com/布局。上传工作正常。我想以 Dropzone 用于特定帖子的形式保存其他数据。
我需要为数组编制索引,以便发布的所有数据都与数组相关。
'previewTemplate' 仅允许字符串 - 无功能。
例如:lead_image[ INDEX HERE ][filename]
uploader.dropzone({
url: "/admin/upload",
acceptedFiles: 'image/*',
thumbnailWidth: 80,
thumbnailHeight: 80,
parallelUploads: 20,
autoProcessQueue: true, // Make sure the files aren't queued until manually added
clickable: ".fileinput-button", // Define the element that should be used as click trigger to select files.
previewsContainer: "#previews", // Define the container to display the previews
init: function() {
this.on("addedfile", function(file) {
var index = $('li.image').length;
});
},
previewTemplate: '<li class="image row dd-item">' +
'<div class="col-sm-1 dd-handle">' +
'<span class="preview">' +
'<img data-dz-thumbnail />' +
'</span>' +
'</div>' +
'<div class="col-sm-8">' +
'<p><span class="name" data-dz-name></span> | <span class="size" data-dz-size></span></p>' +
'<input type="hidden" class="form-control" name="lead_image[ INDEX HERE ][filename]" data-dz-name/>' +
'<input type="text" class="form-control" name="lead_image[ INDEX HERE ][title]" value="" placeholder="Title" />' +
'<input type="text" class="form-control" name="lead_image[ INDEX HERE ][alt]" value="" placeholder="Alt Tag" />' +
'<input type="text" class="form-control" name="lead_image[ INDEX HERE ][caption]" value="" placeholder="Caption" />' +
'<input type="text" class="form-control" name="lead_image[ INDEX HERE ][sort]" value="" placeholder="Sort Order" />' +
'<strong class="error text-danger" data-dz-errormessage></strong>' +
'</div>' +
'<div class="col-sm-2">' +
'<button data-dz-remove class="btn btn-danger delete"><i class="glyphicon glyphicon-trash"></i><span>Delete</span></button>' +
'</div>' +
'</li>',
});
我很难将当前项目的索引传递给模板,因为这些项目稍后会通过。
有没有人处理过这个问题或者可以找到解决方案?我目前正在尝试将文件名作为索引注入(inject)作为解决方案,但这不是我认为的最佳方式。
提前感谢您抽出时间提供帮助。
最佳答案
我最后整理了这个。
init: function() {
this.on("success", function(file, responseText) {
console.log(responseText);
// Create the hidden fields
// Created_at
file.createdat = Dropzone.createElement("<input type=\"hidden\" class=\"form-control input-sm\" name=\"" + this.options.inputName + "[" + responseText.id + "][created_at]\" value=\"" + responseText.created_at + "\" />");
file.previewElement.appendChild(file.createdat);
}
}
在 init 函数中,您基本上是在等待 Dropzone 返回成功上传的消息。因此,根据您的服务器端实现,您可以传回您想要的关于文件的任何数据。在我的例子中,我将它存储在数据库中并返回行的信息。
从那里开始,为了在当前帖子中保存该信息,我只是创建了一些隐藏字段来存储数据,然后为我想要的每个隐藏字段重复上述操作。您当然可以为 alt 标签、标题或您喜欢的任何内容添加其他非隐藏字段。
我在响应文本中找到的索引:this.options.inputName + "["+ responseText.id + "][created_at]
希望对您有所帮助。
作为旁注,您也可以在加载已存储在服务器上的文件时执行相同的操作,而这些文件是您要为此特定帖子检索的。只需谷歌 mockfile 和 dropzone,您应该会找到一百万个对您有帮助的结果。原理一样。
关于javascript - jquery/Dropzone.js 获取添加图片的当前索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25177237/