【问题标题】:Shiny with HTML template fails to get a value from a dynamic SELECT / OPTIONS闪亮的 HTML 模板无法从动态 SELECT / OPTIONS 中获取值
【发布时间】:2018-08-08 08:31:21
【问题描述】:

我想创建一个基于 htmltemplate 的 Shiny 应用程序。当我创建静态 SELECT/OPTION html 时,从 OPTION 中选择的值在服务器脚本中可用,我可以例如将其显示在 UI 中,但是当我使用 R 代码生成 SELECT/OPTION html 时,我无法在 UI 中呈现所选值。

有没有办法生成一个动态的 SELECT/OPTION 列表并在 R 代码中使用选定的值?

html模板:

<!doctype html>
<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <script type="application/shiny-singletons"></script>
  <script type="application/html-dependencies">json2[2014.02.04];jquery[1.12.4];shiny[1.0.5];htmlwidgets[1.0];plotly-binding[4.7.1];bootstrap[3.3.7]</script>
  <script src="shared/json2-min.js"></script>
  <script src="shared/jquery.min.js"></script>
  <link href="shared/shiny.css" rel="stylesheet" />
  <script src="shared/shiny.min.js"></script>
  <script src="htmlwidgets-1.0/htmlwidgets.js"></script>
  <script src="plotly-binding-4.7.1/plotly.js"></script>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <link href="shared/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
  <script src="shared/bootstrap/js/bootstrap.min.js"></script>
  <script src="shared/bootstrap/shim/html5shiv.min.js"></script>
  <script src="shared/bootstrap/shim/respond.min.js"></script>
</head>

<body>

  <!-- FIRST SELECT -->
  <select name="car1">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="mercedes">Mercedes</option>
    <option value="audi">Audi</option>
  </select>
  <!-- SELECTED VALUE WILL BE DISPLAYED HERE - WORKS FINE -->
  <div class="shiny-html-output" id="w1"></div>

  <!-- SECOND SELECT -->
  <select class="shiny-html-output" name="car2" id="i"></select>

  <!-- SELECTED VALUE WILL BE DISPLAYED HERE - DOES NOT WORK -->
  <div class="shiny-html-output" id="w2"></div>

</body>
</html>

R 代码:

library(shiny)
library(plotly)
library(htmlwidgets)

shinyApp(

  ui <- htmlTemplate("template.html"),  

  server <- function(input, output) {

    # INSERT SELECTED VALUE BELOW FIRST SELECT
    output$w1 <- renderText(input$car1)

    # GENERATE OPTIONS
    html <- ""
    for(r in 1:nrow(mtcars)){
      html <- paste(html, "<option value='",mtcars[r, "mpg"],"'>",mtcars[r,"mpg"],"</option>", sep="")
    }

    # INJECT INTO TEMPLATE
    output$i <- renderText(html)

    # INSERT SELECTED VALUE BELOW SECOND SELECT (DOES NOT WORK)
    output$w2 <- renderText(input$car2)

  }
)

【问题讨论】:

    标签: r shiny shiny-server


    【解决方案1】:

    原来一个html标签不能为Shiny输入和输出。当应用程序启动时,Shiny 服务器会添加两个 css 类:

    • 闪亮绑定输出
    • 闪亮绑定输入

    这似乎造成了一些冲突。

    一个解决方案是使用一个额外的容器,所以闪亮的输入和输出不在同一个 html 标记中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多