【发布时间】:2018-07-23 23:20:11
【问题描述】:
我创建了一个在数据表中输出数据的 Shiny 应用程序。由于数据表包含注入的下拉菜单,因此 Shiny 和 datatable 的默认下载按钮不起作用(要么全部输出,包括所有下拉菜单选项,要么输出 HTML)。我正在尝试使用 Javascript 导出我拥有的数据。为此,我使用了基于以下 guide 创建的以下外部 Javascript 函数 downloadcsv.js:
shinyjs.myfunction = function(args) {
var data, filename, link, result, ctr, keys, columnDelimiter, lineDelimiter;
columnDelimiter = ',';
lineDelimiter = '\n';
keys = Object.keys(data[0]);
result = '';
result += keys.join(columnDelimiter);
result += lineDelimiter;
data.forEach(function(item) {
ctr = 0;
keys.forEach(function(key) {
if (ctr > 0) result += columnDelimiter;
result += item[key];
ctr++;
});
result += lineDelimiter;
});
csv = result;
filename = 'export.csv';
if (!csv.match(/^data:text\/csv/i)) {
csv = 'data:text/csv;charset=utf-8,' + csv;
}
data = encodeURI(csv);
link = document.createElement('a');
link.setAttribute('href', data);
link.setAttribute('download', filename);
link.click();
}
在我的 Shiny 应用程序的 ui.R 中,我添加了一个下载按钮:
shinyjs::useShinyjs(),
extendShinyjs(script = "downloadcsv.js"),
actionButton("download", "Download"),
在server.R我已经添加:
onclick("download", js$myfunction(data))
但是,当单击“下载”按钮时,没有任何反应。在浏览器或 RStudio 的窗口中运行 Shiny 并没有什么不同。似乎没有执行link.click(); 行,或者根本没有创建下载链接。使用shiny.trace = TRUE运行应用程序时,控制台的输出如下。
发送{“忙碌”:“忙碌”}
发送 {"custom":{"shinyjs-myfunction":{"data":["test1","test2"]}}}
发送{“忙碌”:“空闲”}
所以点击按钮后,Javascript函数似乎正在执行,但没有出现输出/下载。
【问题讨论】:
标签: javascript r csv shiny shinyjs