我一直在用闪亮的工作,我觉得这很好,但是我在使用动作按钮功能时有问题,问题是如果隐藏了容器,我要把响应信息放在哪里,动作按钮不起作用
例如。
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();它可以解决问题,但如果隐藏容器不起作用。
谢谢大家。
答案 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)