Невозможно передать переменную атрибуту стиля в блестящем и htmltemplate - PullRequest
0 голосов
/ 11 января 2019

Я использую блестящий, но используя мои собственные CSS и HTML. Я столкнулся с проблемой, когда я не могу передать значение в свой пользовательский интерфейс с сервера и поместить его в тег div.

То, к чему я стремлюсь:

######all my code#####
<div style="color:{{textOutput("my_variable")}}"
####rest of code####

По какой-то причине, глянцевый не будет правильно передавать значение, и поэтому мое приложение не загружается должным образом.

Вот полный код

library(shiny)

test_date <- as.Date(c('2019-01-01','2019-01-02','2019-01-03','2019-01-04'))
score <- c(75,80,85,90)
my_dataframe <- data.frame(test_date, score)

getColor <- function(x) {
  if (x > 80) {
    result <- "green"
  }
  else if (x > 50) {
    result <- "yellow"
  }
  else {
    result <- "red"
  }
  return(result)
}

ui <- htmlTemplate(
  text_ = '
  <html>
  <head> 
  {{headContent()}}
  <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.2.0]</script>
  </head>
  <body>
  <div style="color:{{textOutput("score_color")}}">{{textOutput("score_value")}}</div>
  </body>
  </html>'
)
server <- function(input, output, session) {
  output$score_value <- renderText(
    {mean(my_dataframe$score)}
  )
  output$score_color <- renderText(
    {getColor(mean(my_dataframe$score))}
  )
}
shinyApp(ui, server)

Так что, если бы это работало правильно, я бы увидел ответ 82.5, выделенный красным текстом.

1 Ответ

0 голосов
/ 11 января 2019

Я думаю, что глянцевый не предназначен для вывода чистого текста. Вы можете построить div на сервере и вывести пользовательский интерфейс:

library(shiny)

test_date <- as.Date(c('2019-01-01','2019-01-02','2019-01-03','2019-01-04'))
score <- c(75,80,85,90)
my_dataframe <- data.frame(test_date, score)

getColor <- function(x) {
  if (x > 80) {
    result <- "green"
  }
  else if (x > 50) {
    result <- "yellow"
  }
  else {
    result <- "red"
  }
  return(result)
}

ui <- htmlTemplate(
  text_ = '
  <html>
  <head> 
  {{headContent()}}
  <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.2.0]</script>
  </head>
  <body>
  {{uiOutput("score_value")}}
  </body>
  </html>'
)
server <- function(input, output, session) {
  output$score_value <- renderUI(
    div(
      renderText(
        {mean(my_dataframe$score)}
      ),
      style=paste0('color:',getColor(mean(my_dataframe$score)),';')
    )
  )
}
shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...