Я пытаюсь выяснить, возможно ли это.Прежде всего, я должен сказать, что я клонирую объект FileReader
и поддерживаю его во всем приложении (так что я могу позволить пользователю удалять файлы, прежде чем они официально загрузят их).
Все это работает нормально,но я застрял, пытаясь найти лучший способ позволить пользователю удалить элемент из этого клонированного объекта (элементы такие же, как файлы [изображения в моем случае], которые можно найти в обычном объекте FileReader).
Итак, по сути, я клонировал объект, добавив к нему pseudoHash
, который позволяет мне ссылаться на клонированный элемент, который пользователь хочет удалить, и, нажав на значок «Удалить», я ищусвязанный pseudoHash
, который я привязал к этому значку, внутри клонированного объекта, и удалите элемент.Если бы объект был в своей собственной функции, он бы работал нормально, но это не так.Поэтому у меня возникли проблемы при попытке удалить членов объекта.Я сделал files
глобальным в этом случае, но он все еще не работает.
// Our FileList object
files = e.target.files;
// Create a clone since FileList is readonly
files = cloneObject(files);
// If files isn't empty, give the user the option to remove members
if (files.length) {
files = removeSelected(files);
}
Вот моя функция.К сожалению, когда я щелкаю, чтобы удалить изображение из «очереди загрузки», он должен пройти через эту функцию, но на самом деле он не удаляет объект, так как я знаю, что Javascript никогда не удаляет объекты полностью, поэтому, если это последний членЯ пытаюсь установить его на пустой объект, но это не работает.Если это не последний участник, я просто хочу удалить его на свое место.Опять же, поскольку это отдельная функция, а не родительская, она только удаляет локальную ссылку на переменную.
// Remove selected file from cloned fileList object
var removeSelected = function(files) {
var dataPseudoHash = $(this).attr('data-pseudo-hash');
$('#js-selected-files').delegate('.js-remove-selected', 'click', function() {
if (files.length == 1) {
$('.js-image-upload').attr('disabled', true).addClass('btn_disabled');
files = {};
delete files;
} else {
// Loop through our files object and if we find a member with the same
// pseudoHash as the attribute from whatever 'X' icon that was clicked, remove it
$.each(files, function(i, dataPseudoHash) {
if (files[i].pseudoHash == dataPseudoHash) {
delete files[i];
files.length -= 1;
}
});
}
// Remove hidden input that prevents duplicate files being uploaded of
$('.js-pseudo-hash[value="' + dataPseudoHash + '"]').remove();
$(this).parent().fadeOut('normal', function() {
$(this).remove();
});
return files;
};
Какой лучший способ справиться с этим?Может быть, установить флаг в true или false, а затем удалить объект или его члены соответственно в родительской функции в зависимости от случая?Не совсем уверен.Кроме этого, у меня все нормально, загрузка файлов, но мне нужно выяснить, как полностью удалить свойства объекта или объекта (если щелкнуть все значки «Удалить»).