Shiny 如何清洁';输入';从已删除的输入小部件中列出

Shiny 如何清洁';输入';从已删除的输入小部件中列出,shiny,Shiny,我的闪亮应用程序允许用户动态创建/删除输入 然后我循环这些输入以获得值(例如,val1自上次检查以来,HTMLWidget的文档已经改进了。这是deanattali的一篇非常有用的文章 因此,我的解决方法是使用一个使用HTMLWidget的自定义小部件。该小部件管理输入字段的创建/删除,并将输入作为一条json消息发送到服务器端。对于Shiny,这意味着只有一个输入…没有更多问题。自上次检查以来,HTMLWidget的文档有所改进。这是特别的这是deanattali的一篇非常有用的帖子

我的闪亮应用程序允许用户动态创建/删除输入


然后我循环这些输入以获得值(例如,val1自上次检查以来,HTMLWidget的文档已经改进了。这是deanattali的一篇非常有用的文章


因此,我的解决方法是使用一个使用HTMLWidget的自定义小部件。该小部件管理输入字段的创建/删除,并将输入作为一条json消息发送到服务器端。对于Shiny,这意味着只有一个输入…没有更多问题。

自上次检查以来,HTMLWidget的文档有所改进。这是特别的这是deanattali的一篇非常有用的帖子


因此,我的解决方法是使用一个使用htmlwidgets的自定义小部件。该小部件管理输入字段的创建/删除,并将输入作为一条json消息发送到服务器端。对于Shiny,这意味着只有一个输入…没有更多问题。

我还尝试使用shinyjs函数“重置”,但没有更好的结果。您可以提供更好的ex吗有足够的代码可以运行please@PorkChop:我添加了一个项目的代码来说明这个问题。我还尝试使用shinyjs函数“reset”,但没有更好的结果。您可以提供一个更好的示例,其中包含可以运行的代码吗please@PorkChop:我添加了一个项目的代码来说明这个问题
library(shiny)

# Define UI for dataset viewer application
shinyUI(fluidPage(

  # Javascript to handle the add/remove action of inputs
  tags$head(tags$script(src="script.js")),

  # Container where the script adds the dynamic inputs
  tags$div(id = "container_for_dynamic_inputs"),

  # 'Add' button
  tags$button(onclick="addNewInputText()",
              class = "btn btn-default",
              "Add input"),

  # 'Remove' button
  tags$button(onclick="removeLastInputText()",
              class = "btn btn-default",
              "Remove input"),

  # Keeps tracks of the number of inputs (see server.R) 
  verbatimTextOutput("summary")

  )
)
var number_of_dynamic_inputs = 0;

var addNewInputText = function () {
  console.log("addNewInputText");

  var container_elt = document.getElementById("container_for_dynamic_inputs");

  Shiny.unbindAll(container_elt);

  var new_input = document.createElement("input");
  var id = "input_" + number_of_dynamic_inputs++;
  new_input.setAttribute("id", id);
  new_input.setAttribute("name", id);
  new_input.setAttribute("type", "text");
  new_input.setAttribute("value", id);

  container_elt.append(new_input);

  Shiny.bindAll(container_elt);

}


var removeLastInputText = function () {

  var container_elt = document.getElementById("container_for_dynamic_inputs");

  Shiny.unbindAll(container_elt);

  number_of_dynamic_inputs--;
  var id = "input_" + number_of_dynamic_inputs ;

  console.log("removeLastInputText: ", id);

  var elementToRemove = document.getElementById(id);

  container_elt.removeChild(elementToRemove);

  Shiny.bindAll(container_elt);

}
library(shiny)

shinyServer(function(input, output) {

  output$summary <- renderPrint({
    for (i in names(input)) {
      print(input[[i]])
    } 
  })

})