Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript R在带有侧面板/条件面板的选项卡之间构建链接_Javascript_R_Shiny_Datatables - Fatal编程技术网

Javascript R在带有侧面板/条件面板的选项卡之间构建链接

Javascript R在带有侧面板/条件面板的选项卡之间构建链接,javascript,r,shiny,datatables,Javascript,R,Shiny,Datatables,这是一个建立在讨论之上的问题。这个解决方案正是我所需要的,但是当点击表格时,我的侧面板不会改变 因此,我的问题是,当单击表中的链接时,如何更改侧面板 下面是一些可复制的代码: library(shiny) library(DT) server <- function(input, output) { output$iris_type <- DT::renderDataTable({ datatable(data.frame(Species=paste0("<a h

这是一个建立在讨论之上的问题。这个解决方案正是我所需要的,但是当点击表格时,我的侧面板不会改变

因此,我的问题是,当单击表中的链接时,如何更改侧面板

下面是一些可复制的代码:

library(shiny)
library(DT)

server <- function(input, output) {
  output$iris_type <- DT::renderDataTable({
    datatable(data.frame(Species=paste0("<a href='#filtered_data'",
                                        "alt='",unique(iris$Species),"'",                                                 
                                        "onclick=\"",
                                        "tabs = $('.tabbable .nav.nav-tabs li');",
                                        "tabs.each(function() {",
                                        "$(this).removeClass('active')",
                                        "});",
                                        "$(tabs[1]).addClass('active');",
                                        "tabsContents = $('.tabbable .tab-content .tab-pane');",
                                        "tabsContents.each(function() {",
                                        "$(this).removeClass('active')",
                                        "});",
                                        "$(tabsContents[1]).addClass('active');",
                                        "$('#filtered_data').trigger('change').trigger('shown');",
                                        "Shiny.onInputChange('species', getAttribute('alt'));",
                                        "\">",
                                        unique(iris$Species),
                                        "</a>")),
                              escape = FALSE)
  })

  output$filtered_data <- DT::renderDataTable({
    if(is.null(input$species)){
      datatable(iris)
    }else{
      datatable(iris[iris$Species %in% input$species, ])
    }
  })
}

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      conditionalPanel(
        'input.dataset === "Iris Type"',
        helpText("This is the full Iris panel")
      ),
      conditionalPanel(
        'input.dataset === "Filtered Data"',
        helpText("This is the filtered panel")
      ),
      width = 2
    ),
  mainPanel(
    tabsetPanel(
      id = 'dataset',
      tabPanel("Iris Type", DT::dataTableOutput("iris_type")),
      tabPanel("Filtered Data", DT::dataTableOutput("filtered_data"))
    )
  ))
)

shinyApp(ui = ui, server = server)

如果我对你的问题理解正确,我想你可以添加Shiny.onInputChange'dataset','Filtered Data';,到您的javascript

完整代码:



library(shiny)
library(DT)

server <- function(input, output) {
  output$iris_type <- DT::renderDataTable({
    datatable(data.frame(Species=paste0("<a href='#filtered_data'",
                                        "alt='",unique(iris$Species),"'",                                                 
                                        "onclick=\"",
                                        "tabs = $('.tabbable .nav.nav-tabs li');",
                                        "tabs.each(function() {",
                                        "$(this).removeClass('active')",
                                        "});",
                                        "$(tabs[1]).addClass('active');",
                                        "tabsContents = $('.tabbable .tab-content .tab-pane');",
                                        "tabsContents.each(function() {",
                                        "$(this).removeClass('active')",
                                        "});",
                                        "$(tabsContents[1]).addClass('active');",
                                        "$('#filtered_data').trigger('change').trigger('shown');",
                                        "Shiny.onInputChange('species', getAttribute('alt'));",
                                        "Shiny.onInputChange('dataset', 'Filtered Data');",
                                        "\">",
                                        unique(iris$Species),
                                        "</a>")),
              escape = FALSE)
  })

  output$filtered_data <- DT::renderDataTable({
    if(is.null(input$species)){
      datatable(iris)
    }else{
      datatable(iris[iris$Species %in% input$species, ])
    }
  })
}

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      conditionalPanel(
        'input.dataset === "Iris Type"',
        helpText("This is the full Iris panel")
      ),
      conditionalPanel(
        'input.dataset === "Filtered Data"',
        helpText("This is the filtered panel")
      ),
      width = 2
    ),
    mainPanel(
      tabsetPanel(
        id = 'dataset',
        tabPanel("Iris Type", DT::dataTableOutput("iris_type")),
        tabPanel("Filtered Data", DT::dataTableOutput("filtered_data"))
      )
    ))
)

shinyApp(ui = ui, server = server)

非常感谢,这是我一直在寻找的公认的简单解决方案。非常感谢