Хорошо, внесены некоторые изменения, чтобы сделать его более полным и полезным в качестве примера, и я думаю, что больше нет опечаток. Обратите внимание, что вы также можете проголосовать сейчас :)
тоящее время я создаю приложение R Shiny с некоторыми пользовательскими js, чтобы обеспечить функциональность перетаскивания. В то время как перетаскивание отлично работает для одного файла, когда я сбрасываю его, используя блестящий JS, загрузка того же файла снова не работает должным образом. Я понимаю, что это связано с тем, что функция onchange не запускается при повторном вводе файла с тем же именем (независимо от того, было ли изменено содержимое файла)
JS:
var datasets = {};
var dragOver = function(e) { e.preventDefault(); };
var dropData = function(e) {
e.preventDefault();
handleDrop(e.dataTransfer.files);
};
var removeFiles = function(e){
jQuery('#datafile').empty();
}
var handleDrop = function(files) {
for (var i = 0, f; f = files[i]; i++) {
var reader = new FileReader();
reader.onload = (function(file) {
return function(e) {
datasets[file.name.toLowerCase()] = e.target.result;
Shiny.onInputChange("datafile", datasets);
var div = document.createElement("div");
var src = "https://cdn0.iconfinder.com/data/icons/office/512/e42-512.png";
div.id = "datasets";
div.innerHTML = [
"<img class='thumb' src='", src, "' title='", encodeURI(file.name),
"'/>", "<br>", file.name, "<br>"].join('');
document.getElementById("drop-area").appendChild(div);
};
})(f);
reader.readAsText(f);
}
};
Server.R (часть этого, смотрящая на ввод файла):
observeEvent(input$datafile, {
infile <- input$datafile
if (is.null(infile)) {
# User has not uploaded a file yet
return(NULL)
}
# CLEAN FILE
name <- names(input$datafile)[1]
csvFile <- read.csv(text=input$datafile[[name]])
output$dataTable <- renderDataTable(csvFile , options = list(scrollX = '1100px') )
}
ui.R (только соответствующая часть):
# DRAG AND DROP FILE INPUT
h3(id="data-title", "Drop Datasets"),
div(class="col-xs-12", id="drop-area", ondragover="dragOver(event)",
ondrop="dropData(event)" , onClick="fallback(event)"),
div(onClick="removeFiles(event)", actionButton(inputId="resetAutomaticInput", label="Reset Input")
Я не понимаю, как заставить мои блестящие значения реагировать на событие, связанное с входным $ datafile. Любая помощь высоко ценится!