R / блестящая вкладка изменения и ввод по динамически сгенерированной ссылке нажали - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь добавить динамически сгенерированные ссылки в таблицу данных переменной длины. При нажатии на ссылку следует переключить фокус на вкладку сведений. В то же время выбранный вход должен быть обновлен до марки автомобиля, по которой был выполнен щелчок, чтобы информация на вкладке сведений обновлялась. Я подготовил минимальный пример с actionLinks. Однако я не мог понять, как заставить ссылки делать то, что я хочу.

library(shiny)
library(htmlwidgets)
library(tibble)
library(DT)

ui <- fluidPage(
  title = "Examples of DataTables",
  sidebarLayout(
    sidebarPanel(
      selectInput("car", h3("Car"),choices = rownames(mtcars))
    ),
    mainPanel(
      tabsetPanel(id = "dataset",
        tabPanel("Cars", DT::dataTableOutput("mytable1")),
        tabPanel("Details", DT::dataTableOutput("mytable2"))))))

server <- function(input, output) {

  shinyInput = function(FUN, len, id, labels, ...) {
    inputs = NULL
    for (i in seq_len(len)) {
      inputs[i] = as.character(FUN(paste0(id, i), label = labels[i], ...))
    }
    return(inputs)
  }

  output$mytable1 <- DT::renderDataTable({
    cars <- mtcars %>% rownames_to_column() %>% select(rowname, mpg, cyl)
    cars$rowname <- shinyInput(actionLink, nrow(cars), "link_", labels = cars$rowname)
    DT::datatable(cars, rownames = FALSE, escape = FALSE)
  })

  output$mytable2 <- DT::renderDataTable(DT::datatable(mtcars[input$car,]))
}

shinyApp(ui, server)

Любая помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 31 октября 2018

Я нашел решение, используя функцию onclick кнопки и операторы JavaScript. Чтобы открыть вкладку, смоделируйте щелчок по ней и для изменения выпадающего меню используйте selectize.

 shinyInput = function(FUN, len, id, labels, ...) {
    inputs = NULL
    for (i in seq_len(len)) {
      inputs[i] = as.character(FUN(paste0(id, i), label = labels[i], 
         onclick = paste0('$("#dataset li a")[1].click();$("#car")[0].selectize.setValue("',labels[i],'")')))
    }
    return(inputs)
  }
...