隐藏容器时,操作按钮不起作用。闪亮的R.

时间:2013-11-07 16:05:17

标签: r shiny shiny-server

我一直在用闪亮的工作,我觉得这很好,但是我在使用动作按钮功能时有问题,问题是如果隐藏了容器,我要把响应信息放在哪里,动作按钮不起作用

例如。

index.html

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Example Tabs</title>
 <script src ="shared/jquery.js"></script>
 <script src ="shared/shiny.js"></script>
 <script src ="actionbutton.js"></script>
</head>
<body>
 <form class="span12 menu-med-upload">
  <div class="row-fluid">
   <button id="uploadFasta" type="button" class="btn action-button shiny-bound-input" >go!</button>
   <button id="show">Show</button>
   <button id="hide">Hide</button>
  </div>
 </form>
 <div id="table" class="shiny-html-output">asdasd</div>
 <script>
  $("#table").hide();
  $("#show").on("click",function(){
   $("#table").show();
  });
 </script>
</body>
</html>

server.R

library(shiny)

shinyServer(function(input, output) {
 output$table <- renderText({
  if(input$uploadFasta == 0)
   return(NULL)
  return("Clicked!")
 })
})

如果我注释行$(“#table”)。hide();它可以解决问题,但如果隐藏容器不起作用。

谢谢大家。

1 个答案:

答案 0 :(得分:2)

我不久前偶然发现了一个非常类似的问题,尽管它影响了input元素。有关详细信息,请参阅my question,以及链接的Google group discussion

基本上,问题是如果在加载reactive时隐藏了DOM元素,则Shiny会失去跟踪(不确定这是否是您的情况)。

无论如何,您可能想尝试两种可能的解决方案。

  • 第一个是在显示shown div时触发table事件。此解决方案更精细,因为它允许您随时控制是否对任何隐藏元素做出反应。要执行此操作,只需将Javascript更改为以下操作:

    $("#table").show().trigger('shown');
    
  • 另一种可能性是指示Shiny在隐藏时不要忽略table div。该解决方案将使任何受影响的元素始终发生反要实现此目的,请更改您的server.R文件以包含以下行:

    outputOptions(output, 'table', suspendWhenHidden=FALSE)