刷新后忽略闪亮的滑块样式

时间:2017-08-21 10:01:15

标签: r shiny

我正在开发一个闪亮的应用程序,它从文件中读取数据,并在应用程序上显示数据,还允许用户刷新数据。该应用程序工作正常,但当我用动作按钮“刷新”数据时,一些样式已经消失。

以下是我的app.R

的简化版
library(shiny)
file_name <- "sample.csv"
bkg_color <- "red"

# Define UI for application
ui <- fluidPage(
  actionButton("refresh", "", icon("refresh") ),
  tableOutput("table"),
  uiOutput("slider")
)

# Define server logic required
server <- function(input, output, session) {
  observeEvent(input$refresh,{
    source("updatedata.R")
    showModal(modalDialog(
      title = "", 
      "Data refreshed", 
      easyClose = TRUE,
      footer = NULL
    ))
  })
  # observe the raw file, and refresh if there is change every 5 seconds
  raw <- reactivePoll(5000, session, 
                          checkFunc = function(){
                            if (file.exists(file_name))
                              file.info(file_name)$mtime[1]
                            else
                              ""
                          }, 
                          valueFunc = function(){
                           read.csv(file_name)
                          })
output$table <- renderTable(raw())      
output$slider <- renderUI({
    req(raw())
    tagList(
      # styling slider bar
      tags$style(HTML(paste0(".js-irs-0 .irs-single, .js-irs-0 .irs-bar-edge, .js-irs-0 .irs-bar {background: ",
                            bkg_color,";border-top: ",bkg_color,";border-bottom: ",bkg_color,"; border: ",bkg_color,"}"))),
      sliderInput("date","", 
                  min = min(raw()$v1), 
                  max = max(raw()$v1), 
                  value = max(raw()$v1))
    )

  })

}

# Run the application 
shinyApp(ui = ui, server = server)

在上面,我使用renderUI作为我的滑块,因为值取决于我从本地文件中读取的原始值。我明确指定滑块的颜色(当前设置为红色)。

在同一目录中,我updatedata.R执行类似下面的操作:

file_name <- "sample.csv"
temp <- data.frame(v1 =runif(10, min = 0, max = 100), v2 = Sys.time() )
write.csv(x =temp, file = file_name,row.names = FALSE )

要运行示例应用程序而不出错,请先运行上面的代码来初始化csv文件。

当应用首次启动时,滑块为红色。但是,通过单击应用程序顶部的刷新按钮[浏览器刷新]刷新基础数据后,滑块会更改回默认的闪亮应用颜色。

我已经搜索了相当长一段时间的答案,但是甚至无法弄清楚这是什么原因。有没有人之前遇到类似的问题,或者知道如何修复它,以便刷新后滑块的颜色不变?

谢谢!

1 个答案:

答案 0 :(得分:1)

每次渲染新滑块时,Shiny都会递增滑块类。 因此初始类在刷新时变为.js-irs-1,然后是.js-irs-2等。

将您的css选择器更改为.irs d = [{'val': 454,'name': 'ss', 'name1': 'ff'},{'val': 'ss','name': 'ww', 'name1': 'ff'},{'val': 22, 'name': 'dd', 'name1': 'aa'}] ,如下所示:

def flatten(structure, key="", flattened=None):
    if flattened is None:
        flattened = {}
    if type(structure) not in(dict, list):
        flattened[key] = structure
    elif isinstance(structure, list):
        for i, item in enumerate(structure):
            flatten(item, "%d" % i, flattened)
    else:
        for new_key, value in structure.items():
            flatten(value, new_key, flattened)
    return flattened

但是我建议使用服务器端逻辑来更新输入。这通常是更好的练习,因为html元素在网站上呈现,并且只更新某些值而不是整个元素。 检查child功能以更新滑块