ファイル入力 UI (進行状況バーと表示される名前の両方) をリセットする 2 つの方法があります。1 つ目は JavaScript を使用し、2 つ目は renderUI を使用します。
例には、「クリア」ボタンと、選択が変更されたときにファイル入力 UI をリセットするオプションのドロップダウン メニューの両方が含まれています。
例 1 - JavaScript の使用
ui.R
shinyUI(bootstrapPage(
tags$head(
tags$style(".clearButton {float:right; font-size:12px;}")
),
headerPanel("Reset file input example"),
sidebarPanel(
HTML("<button id='clearFile1' class='action-button clearButton'>Clear</button>"),
fileInput('file1', NULL, width="80%"),
selectInput('uploadFormat', label = "Select upload format",
choices = c(
"Option 1" = 'f1',
"Option 2" = 'f2',
"Option 3" = 'f3'),
selected = 'f1')
),
mainPanel(
h4("Summary"),
verbatimTextOutput("summary")
),
singleton(includeScript("active.js"))
))
サーバー.R
shinyServer(function(input, output, session) {
values <- reactiveValues(
file1 = NULL
)
observe({
input$clearFile1
input$uploadFormat
values$file1 <- NULL
})
observe({
values$file1 <- input$file1
})
output$summary <- renderText({
return(paste("Uploaded file: ", values$file1$name))
})
})
アクティブ.js
$(document).ready(function() {
/* clear file button control */
var fileControl = $("#file1");
$("#clearFile1").on("click", function () {
fileControl.replaceWith( fileControl = fileControl.clone( true ) );
$("#file1_progress").hide();
});
$("#uploadFormat").on("change", function () {
fileControl.replaceWith( fileControl = fileControl.clone( true ) );
$("#file1_progress").hide();
});
/* file input progress bar control */
$( "#file1" ).change(function() {
document.getElementById("file1_progress").setAttribute('style', "height:20px; margin-top:5px;");
});
});
例 2 - renderUI の使用
上記と同じですが、(1) active.js と関連する include ステートメントを取り除きます。(2) ui.R で置き換えます。
fileInput('file1', NULL, width="80%"),
と
uiOutput('resettableInput'),
(3) server.R に以下を追加します。
output$resettableInput <- renderUI({
input$clearFile1
input$uploadFormat
fileInput('file1', NULL, width="80%")
})
ここで list() ステートメントに複数の UI 要素を含めることができ、それらはすべて再レンダリングされることに注意してください。ここを参照してください。
これらの例のコードはこちらとこちらで見つけることができ、次のように実行できます。
library(shiny)
shiny::runGist('0c2a98a0236f1257fd45')
shiny::runGist('bc09d77fa92457e094c8')