R блестящий: используйте шаблон css для кнопки действия

#jquery #html #css #r #shiny

#jquery #HTML #css #r #блестящий

Вопрос:

Я хочу изменить макет actionButton в shiny с помощью css-файла. Я определяю кнопку действия на сервере.R и используйте как uiOutput() в пользовательском интерфейсе.R, как показано ниже

server.R

 shinyServer(function(input, output) {
  output$ActionButtonExample <- renderUI({
      actionButton(
      inputId = "ActionButtonExample",
      label = "Accept",
      icon = icon("check"),
      width = '50%',
      style = 'float:right;'
    )
  })

})
  

ui.R

 # Define UI for application that draws a histogram
shinyUI(fluidPage(

  # Application title
  titlePanel("Old Faithful Geyser Data"),

  # Sidebar with a slider input for number of bins 
  sidebarLayout(
    sidebarPanel(
       sliderInput("bins",
                   "Number of bins:",
                   min = 1,
                   max = 50,
                   value = 30)
    ),

    # Show a plot of the generated distribution
    mainPanel(
       uiOutput("ActionButtonExample")
    )
  )
))
  

Может кто-нибудь объяснить, как оформить кнопку, например, с помощью определения css здесь: http://bootsnipp.com/snippets/l05nD ?

Ответ №1:

Вот рабочий пример для кнопки. checkboxInput будет аналогичным. Обратите внимание, что, поскольку входные элементы отображаются на стороне сервера с использованием uiOutput и renderUI , они фактически создаются JavaScript в браузере пользователя после загрузки HTML-документа. Таким образом $(document).ready() , или $(window).load() оба не работают. В приведенном ниже примере используются следующие шаги:

  1. После события загрузки окна используйте setInterval непрерывный опрос страницы каждые 0,1 секунды, чтобы увидеть, отображается ли кнопка.
  2. После появления кнопки удалите опрос
  3. Найдите кнопку по идентификатору и удалите btn-default класс по умолчанию (в противном случае текст кнопки будет черным и нечитаемым)
  4. Добавьте необходимые 3D-классы.

Код

 library(shiny)

ui <- shinyUI(fluidPage(
  includeCSS("www/btn3d.css"),

  titlePanel("Example"),

  sidebarLayout(
    sidebarPanel(
      uiOutput("button"),
      tags$head(tags$script(HTML("
         $(window).load(function() {
            var i = setInterval(function() {
              if ($('#buttonid').length) {
                clearInterval(i);
                $('#buttonid').removeClass('btn-default').addClass('btn3d btn-primary');
              }
            }, 100);
         });
      ")))
    ),

    mainPanel(

    )
  )
))

server <- shinyServer(function(input, output, session) {

  output$button <- renderUI({
    actionButton("buttonid", "buttonname")  
  })

})

shinyApp(ui = ui, server = server)
  

Комментарии:

1. как насчет checkboxinput, когда у них нет аргумента класса? пример: bootsnipp.com/snippets/featured/jquery-checkbox-buttons

2. Если аргумент class отсутствует, вам нужно будет использовать jQuery, чтобы найти элемент по идентификатору или классу, и добавить необходимые классы с помощью addClass функции jQuery в случае готовности документа. Кроме того, вы можете изменить свой файл CSS, чтобы указать на определенный идентификатор / класс

3. не могли бы вы привести пример в своем ответе для checkboxInput, определенного на сервере. R и вызывается из пользовательского интерфейса. R как uiOutput?

4. На самом деле пример флажка в вашей ссылке совсем другой, поскольку он реализован в jQuery, а не в чистом CSS, как в вашем исходном вопросе. Возможно, вы захотите задать это в новом вопросе.

5. хорошо, аналогично этому вопросу используется этот пример bootsnipp.com/snippets/n2NB8 . Поскольку это моя первая попытка использовать css в приложении shiny, я был бы признателен, например, за точный пользовательский интерфейс code. R и сервер. R в этом случае, чтобы увидеть логику использования checkboxInput с файлом css