【问题标题】:How to delete Shiny actionButton when clicking it单击时如何删除闪亮的动作按钮
【发布时间】:2018-03-02 06:11:42
【问题描述】:

我想在点击后删除一个 actionButton。我之前成功使用了shinyjs::hide("init"),但现在我想完全删除该按钮。我试过下面的代码

问题源于模块化。它根据唯一 ID userPID 更新向量 GlobClass$Init。代码版本的非模块化工作。

例子.R

library(shiny)

### Modularized Code
#' UserSide Function to Create Button
InitializeUI <- compiler::cmpfun( function(id) {
    ns <- NS(id)    
    actionButton( ns("init"), h4("Initialize") )
})         
#' ServerSide Function to Update reactive Vector and Delete Button
Initialize <- compiler::cmpfun( function(input, output, session,
    GlobClass, userPID ) {

    observeEvent( input$init, {
        cat("click\n")
        removeUI(selector='#init', immediate=TRUE)
        GlobClass$Init[userPID] <- TRUE
    }, autoDestroy=TRUE)
})

### User.R
ui <- fluidPage( InitializeUI("init") )

### Server.R
GlobClass <- reactiveValues(Init=c(FALSE, FALSE))

server <- function(input,output) {
    userPID <-  sample( 1:2,1)
    cat(userPID, "\n")
    callModule( Initialize, "init", GlobClass, userPID )        
}

### Run Application
shinyApp(ui, server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    以下似乎对我来说很好。实现上有区别吗?

    library(shiny)
    
    ui <- fluidPage(
      actionButton('init','Click')
    )
    
    # The server function
    server <- function(input,output) 
    {
      observeEvent(input$init, {
        removeUI(selector='#init', immediate=TRUE)
      }, autoDestroy=TRUE)
    
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 是的,这似乎是一个实现问题——特别是模块化。你有什么想法吗?
    【解决方案2】:

    你可以这样做:

      actionButton(
        ns("init"), h4("Initialize"), 
        onclick = "var $btn=$(this); setTimeout(function(){$btn.remove();},0);"
      )
    

    (并且不要使用removeUI)。

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 2019-04-19
      相关资源
      最近更新 更多