Мы используем JackUp для загрузки изображения ajax в Rails. Мы выбрали его, потому что он не предполагает очень многого, и это довольно легкий вес.Лучший способ создать неизвестное количество экземпляров JackUp
После это пример кода, мы придумали что-то вроде этого:
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();
});
Это работает так же, как ожидается, с одной кнопкой загрузки изображений (классифицируется как file-drop
). Однако на странице будет отображаться неизвестное количество этих кнопок загрузки изображений.
При наличии более одной кнопки загрузки каждый раз, когда файл добавляется, он добавляется ко всем image-block-container
элементам, а не только к таргетингу. Похоже, что jackUp
не имеет понятия элемента, который его вызвал.
Каков наилучший способ разрешить каждой кнопке загрузки знать, что называется? Я попытался окружить его в блоке .on('drop'...
. Это дало мне доступ к элементу, но ни один из событий JackUp не был запущен.
Любая помощь или совет для облегченного Rails-ajax gem оценивается!
'e' в' upload: imageRenderReady' похоже, не имеет ссылки на то, с чем взаимодействует пользователь. Вот что выглядит 'e': http://puu.sh/omnI9/650cdf2fd7.png, и это' e.target' http://puu.sh/omnLR/015ff297f3.png. Поверьте мне, ничего в 'e.target, currentTarget или delegateTarget' не имеет ссылки на элемент DOM. Кажется, все они ссылаются на «jQuery11210678854975767535», но я не могу разобраться, что это такое. Когда я смотрю в объект 'jQuery112 ...', ничего примечательного. –
Я предполагаю, что вы также посмотрели аргумент 'options'? Я думаю, что у него будут «образ» и «файл»: https://github.com/thoughtbot/jack_up/blob/master/lib/assets/javascripts/jack_up/processor.coffee#L28 - Возможно, вы сможете использовать ' options.image.parentNode' или 'options.image.parentNode.parentNode' ... В противном случае вам может понадобиться создать отдельный экземпляр JackUp для каждой загрузки и использовать соглашения об идентификаторах DOM (например,' id = "imageupload-01" '), чтобы дифференцировать селекторы для каждого. Репо кажется старым - многочисленные PR из прошлого года, которые не слиты. – pherris
Спасибо за совет! Я закончил разворачивать репо и модифицировал его, чтобы иметь эту функциональность. –