Gui*_*ens 4 html javascript jquery r shiny
我使用R3.0.0和Shiny0.7.0创建一个Shiny网页HTML UI.
似乎我偶然发现了关于元素OnLoad()事件的Shiny中的限制或错误body.
由于Shiny没有为多个HTML页面做好准备,正如Joe Cheng 在此所述我想用jQuery而不是要显示和隐藏divs在必要.
除非我在OnLoad中隐藏div,否则这样做效果相当不错事件中.在那种情况下,它似乎reactive input components不再被检测到Shiny.
下面你可以看到一个测试用例:
Server.R
library(shiny)
shinyServer(function(input, output) {
output$caption <- renderText({input$myInput})
})
Run Code Online (Sandbox Code Playgroud)
的index.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>
Run Code Online (Sandbox Code Playgroud)
library.js
function showFoo(){
$('#foodiv').show();
$('#bardiv').hide();
}
function showBar(){
$('#foodiv').hide();
$('#bardiv').show();
}
function initForm(){
/*showFoo(); */
}
Run Code Online (Sandbox Code Playgroud)
如果您按原样使用此代码,Shiny将对myInput组件中的更改做出反应并将其写入caption组件.另一方面,如果您注释掉其中的代码,initForm()将停止对您写入的内容作出反应myInput.
我用Firefox 23.0.1测试了这个.
有人知道我做错了什么吗?
请参阅Winston发布的这个闪亮的邮件列表帖子.
你可以写
shinyServer(function(input, output) {
output$caption <- renderText({input$myInput})
outputOptions(output, 'caption', suspendWhenHidden=FALSE)
})
Run Code Online (Sandbox Code Playgroud)
确保隐藏时元素仍然更新.
| 归档时间: |
|
| 查看次数: |
1886 次 |
| 最近记录: |