Блестящий с HTML UI ограничен Javascript OnLoad?
Я использую R
3.0.1 с Shiny
0.7.0, чтобы создать блестящую веб-страницу с HTML UI
,
Кажется, я наткнулся на то, что кажется либо ограничением, либо ошибкой в Shiny в отношении OnLoad()
событие body
элемент.
Так как Shiny не подготовлен для нескольких HTML-страниц, как сказал здесь Джо Ченг, я пытаюсь использовать jQuery
вместо того, чтобы показать и скрыть divs
где необходимо.
Это работает достаточно хорошо, за исключением случаев, когда я скрываю div в событии OnLoad. В таком случае кажется reactive input components
больше не обнаруживаются Shiny
,
Ниже вы можете увидеть тестовый пример для этого:
Server.R
library(shiny)
shinyServer(function(input, output) {
output$caption <- renderText({input$myInput})
})
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>
library.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.
Кто-нибудь знает, если я делаю что-то не так?
1 ответ
Смотрите этот блестящий список рассылки от Уинстона.
Ты можешь написать
shinyServer(function(input, output) {
output$caption <- renderText({input$myInput})
outputOptions(output, 'caption', suspendWhenHidden=FALSE)
})
чтобы гарантировать, что элемент все еще обновляется, когда скрыт.