2016-08-18 27 views
0

ラジオボタンを選択する機能を制限する必要がありますが、常に表示する必要があります。私はshinyjs::disableを使用してボタンを無効にし、updateRadioButtonsを選択して更新しますが、正しく動作していないようです。shinyjsでshinyjsを無効にする/有効にする

library(shiny) 
library(shinyjs) 

server = shinyServer(function(input, output, session) { 

observeEvent(input$toggle, { 

if (input$toggle == "enable") { 

    updateRadioButtons(session, "button1", "", 
        c("one" = "one", "two" = "two"), 
        inline = T, selected = "one") 

    shinyjs::enable("button1") 

} 

if (input$toggle == "disable") { 

    updateRadioButtons(session, "button1", "", 
        c("one" = "one", "two" = "two"), 
        inline = T, selected = "two") 

    shinyjs::disable("button1") 

} 

}) 

}) 

ui = shinyUI(

fluidPage(

shinyjs::useShinyjs(), 

radioButtons("toggle", "", 
      c("enable" = "enable", "disable" = "disable"), inline = T), 

radioButtons("button1", "", 
      c("one" = "one", "two" = "two"), inline = T) 

)) 

shinyApp(ui=ui,server=server) 

答えて

1

これは、更新機能が実際に少し後で更新を行っているために起こっていることです。つまり、更新機能が呼び出され、無効化が呼び出され、ボタンが無効になり、少し後にボタンが更新から再生成されるということです。それは、光沢のある仕事の内部の仕組みのためです。更新機能をコメントアウトすると、ボタンが無効になることがわかります。これは厄介なことですが、光沢のある作品の副作用に過ぎません。あなたが試みることができる1つのハックな解決策はdisable(id)の代わりにshinyjs::delay(100, disable(id))を使用してください(つまり、100msの短い遅延を追加してから無効にすることを意味します)。

関連する問題