我正在使用R
3.0.1 和Shiny
0.7.0 创建一个带有HTML UI
.
似乎我偶然发现了 Shiny 中关于元素OnLoad()
事件的限制或错误。body
由于 Shiny 没有为多个 HTML 页面做好准备,正如 Joe Cheng 所说,我试图在必要时使用它jQuery
来显示和隐藏。divs
这工作得相当好,除非我在 OnLoad事件中隐藏 div。在那种情况下,它似乎reactive input components
不再被Shiny
.
下面你可以看到一个测试用例:
服务器.R
library(shiny)
shinyServer(function(input, output) {
output$caption <- renderText({input$myInput})
})
索引.html
<head>
<script src="shared/jquery.js" type="text/javascript"></script>
<script src="shared/shiny.js" type="text/javascript"></script>
<script type="text/javascript" src="js/library.js"></script>
</head>
<body onload="initForm();">
<div id="dMenu">
<a href="#" onclick="showFoo();">Show foo div</a>
<br>
<a href="#" onclick="showBar();">Show bar div</a>
</div>
<!-- some random div -->
<div id="foodiv">This is the Foo div</div>
<!-- div with reactive input -->
<div id="bardiv">
This is the Bar div
<br>
<input type="text" id="myInput" class ="shiny-bound-input" name="myInput" autocomplete="off">
<div id="caption" class="shiny-text-output shiny-bound-output"></div>
</div>
</body>
库.js
function showFoo(){
$('#foodiv').show();
$('#bardiv').hide();
}
function showBar(){
$('#foodiv').hide();
$('#bardiv').show();
}
function initForm(){
/*showFoo(); */
}
如果您按原样使用此代码,Shiny 将对myInput
组件中的更改做出反应并将它们写入caption
组件。另一方面,如果您将其中的代码注释掉,initForm()
它将停止对您写入的任何内容做出反应myInput
。
我用 Firefox 23.0.1 对此进行了测试。
有人知道我做错了什么吗?