2

我一直在使用闪亮,我认为这很好,但是我在使用操作按钮功能时遇到了问题,问题是如果隐藏了我要放置响应信息的容器,操作按钮不起作用。

例如。

索引.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>

服务器.R

library(shiny)

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

如果我评论 $("#table").hide(); 它可以正常工作,但如果隐藏容器将不起作用。

谢谢大家。

4

1 回答 1

2

不久前我偶然发现了一个非常相似的问题,尽管它影响了一个input元素。有关更多信息,请参阅我的问题以及链接的Google 小组讨论

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

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

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

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

    outputOptions(output, 'table', suspendWhenHidden=FALSE)
    
于 2013-11-17T21:18:05.263 回答