Nous utilisons JackUp pour le téléchargement d'images ajax dans Rails. Nous l'avons choisi parce qu'il ne suppose pas grand-chose et qu'il est plutôt léger.Meilleure façon de créer un nombre inconnu d'instances JackUp
Après son code d'exemple, nous sommes arrivés avec quelque chose comme ceci:
let jackUp = new JackUp.Processor({
path: '/images'
});
jackUp.on('upload:imageRenderReady', (e, options) => {
options.image.attr("data-id", options.file.__guid__).css({
border: "5px solid red"
});
$('[data-behavior=image-block-container]').prepend(options.image);
}).on("upload:sentToServer", (e, options) => {
$(`img[data-id='${options.file.__guid__}']`).css({
borderColor: 'yellow'
});
}).on("upload:success", (e, options) => {
$(`img[data-id='${options.file.__guid__}']`).css({
borderColor: "green"
});
}).on("upload:failure", (e, options) => {
alert(`'${options.file.name}' upload failed; please retry`);
$(`img[data-id='${options.file.__guid__}']`).remove();
});
$('.file-drop').jackUpDragAndDrop(jackUp);
$(document).bind('drop dragover', e => {
e.preventDefault();
});
Cela fonctionne exactement comme prévu avec un bouton de téléchargement d'image (classé file-drop
). Cependant, une page aura un nombre inconnu de ces boutons de téléchargement d'image.
Lorsqu'il y a plusieurs boutons de téléchargement, chaque fois qu'un fichier est ajouté, il est ajouté à tous les éléments image-block-container
, au lieu de simplement celui qui a été ciblé. Il semble que jackUp
n'a aucune notion de l'élément qui l'a déclenché.
Quelle est la meilleure façon de permettre à chaque bouton de téléchargement de savoir ce qu'il a appelé? J'ai essayé de l'entourer dans un bloc .on('drop'...
. Cela m'a donné accès à l'élément, mais aucun des événements de JackUp n'a été déclenché.
Toute aide ou conseil pour une gemme de téléchargement ajax Rails-friendly est appréciée!
'e' dans' upload: imageRenderReady' semble n'avoir aucune référence à l'interaction de l'utilisateur. Voici à quoi ressemble 'e': http://puu.sh/omnI9/650cdf2fd7.png et ceci est' e.target' http://puu.sh/omnLR/015ff297f3.png. Faites-moi confiance, rien dans 'e.target, currentTarget ou delegateTarget' n'a de référence à un élément DOM. Ils semblent tous faire référence à 'jQuery11210678854975767535' mais je ne peux pas comprendre ce que c'est. Quand je regarde dans l'objet 'jQuery112 ...', il n'y a rien de remarquable. –
Je suppose que vous avez également regardé l'argument 'options'? Je pense qu'il aura 'image' et' file': https://github.com/thoughtbot/jack_up/blob/master/lib/assets/javascripts/jack_up/processor.coffee#L28 - Vous pourrez peut-être utiliser ' options.image.parentNode' ou 'options.image.parentNode.parentNode' ... A défaut, vous devrez peut-être créer une instance JackUp séparée pour chaque téléchargement et utiliser les conventions DOM ID (par exemple' id = "imageupload-01" ') pour différencier les sélecteurs pour chacun. Le repo semble vieux - de nombreux PR de l'année dernière qui ne sont pas fusionnés. – pherris
Merci pour le conseil! J'ai fini par forker le repo et le modifier pour avoir cette fonctionnalité. –