Блестящий с 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)
})

чтобы гарантировать, что элемент все еще обновляется, когда скрыт.

Другие вопросы по тегам