2015-06-10 3 views
0

У меня есть R блестящего приложение, в котором я выпадающему определенном в ui.R, как lib, значение которой с («X», «Y», «Z»), а также флажок называется spcheck который определяется какR блестящие updateCheckboxInput

checkboxInput("spcheck","label1",value = FALSE)) 

Другие условия делают этот флажок доступен только при input$lib=Z и проверки его бы несколько вещей, которые появляются. Когда пользователь выбирает другую библиотеку, скажем, X, я хочу, чтобы значение spcheckFALSE, поэтому я добавил следующий код server.R

observe({ 
      if (input$lib %in% c("X","Y")) 
      {cat("uncheck called 1 : ",input$spcheck,'\n') 
      updateCheckboxInput(session,"spcheck","label1,value = FALSE) 
      cat("uncheck called 2 : ",input$spcheck,'\n') 
      } 
      else return()        
     }) 

Текст отображается в консоли:

uncheck called 1 : TRUE 
uncheck called 2 : TRUE 

Почему это не делает значение spcheck FALSE? Может быть, мне не хватает чего-то очень тривиального, но я не мог понять это. Любая помощь ??

ответ

1

Потому что требуется несколько миллисекунд, так как вы говорите блестящему, чтобы обновить ввод до тех пор, пока это не произойдет. Когда вы вызываете метод обновления, shiny должен отправить сообщение на JavaScript, чтобы изменить значение ввода, и как только это будет сделано, JavaScript отправит сообщение обратно в R, указав, что ввод имеет новое значение. Но переменная input не изменяется мгновенно, когда вы совершаете вызов, она будет иметь только обновленное значение в следующий раз, когда реактивный оператор использует переменную input$spcheck.

+0

Есть ли работа? сделать паузу в течение нескольких миллисекунд или что-то еще? – Sri

+0

Это особенность реактивного программирования. Если вы действительно этого хотите, вы можете либо сами внести изменения (после выполнения обновления, введите '$ spcheck <- TRUE' или что-то в этом роде) или просто добавьте наблюдателя, который прослушивает изменение в этом вводе' наблюдать ({cat (вход $ SPCheck)}) –

Смежные вопросы