2016-03-31 5 views
3

私はui.RファイルなしでR Shinyアプリケーションを構築しようとしていますが、それはほとんど機能していますが、最終的なハードルを見つけました。以下は、問題の最も簡単な作業のデモンストレーションです:なぜR ShinyはjQueryによって設定されたテキスト入力を受け入れないのですか?

  1. index.htmlファイルは、Rシャイニーによって制御される2つのボタンのjQueryによって制御されている「RAND」という名前の1、および第二の名前「ADD1」を定義します。私はまた、 'temp'と 'out'という2つのテキストボックスを持っています。
  2. このダミープログラムの目的は、 'RAND'が 'temp'に乱数をロードし、 'ADD1'が 'temp'に格納された値を1増加させることです。
  3. 'RAND'ボタン正常に動作しますが、「ADD1」ボタンは「NA」を生成します。面白いのは、私が手で 'temp'の値を変更してから 'ADD1'を再度クリックすると、正しい値が生成されるということです!
  4. 私の質問は次のとおりです:プログラムはなぜ動作しますか?そして、 'temp'の内容を手動で再入力せずに、どのように 'ADD1'の作業を行うことができますか?ここで

私のindex.htmlです:

<html> 
<head> 
<link rel="stylesheet" type="text/css" href="jquery-ui.css"/> 
<script src="jquery.js" type="text/javascript"></script> 
<script src="jquery-ui.js" type="text/javascript"></script> 
<script src="test.js" type="text/javascript"></script> 
<script src="shiny.js" type="text/javascript"></script> 
</head> 
<body> 
<div id="RAND" name="RAND">RAND</div> 
<div id="ADD1" name="ADD1" class="action-button">+1</div> 
<p></p> 
<div class="form-group shiny-input-container"> 
<input id="temp" name="temp" type="text" class="form-control"/> 
</div> 
<p></p> 
<div id="out" class="shiny-text-output"></div> 
</body> 
</html> 

これはserver.Rファイルです:

library(shiny) 
shinyServer(function(input,output,session){ 
    observeEvent(input$ADD1, { 
     output$out <- renderText({ as.numeric(input$temp) + 1 }) 
    }); 
}); 

そして最後に、これは私のJavascriptコード(test.js)です。

$(function(){ 
    $("#RAND").button() 
    $("#RAND").click(function() { 
     $("#temp").val(Math.random()); 
    }); 
    $("#ADD1").button() 
}); 
+0

私は以前も同様の質問を読んでいると思います。基本的にJavascriptの修正値は光沢のある入力では認識されません。 –

+0

Javascriptで生成された動的コンテンツをSiny/Rに渡す他の方法はありますか? – PVM

+1

Shinyの文書化されていない機能があり、JSからShinyにデータを直接送信することができます:https://ryouready.wordpress.com/2013/11/20/sending-data-from-client-to-server-and-バック使用光沢のある/ –

答えて

2

warmoverflowのおかげで、私は自分の質問に答えました:

のindex.htmlは変わらない

server.Rは次のようになります。

library(shiny) 
shinyServer(function(input,output,session){ 
    observe({ 
     input$randval 
    }) 
    observeEvent(input$ADD1, { 
     output$out <- renderText({ as.numeric(input$randval) + 1 }) 
    }) 
}) 

とtest.jsは次のようになります。値は$(#の一時を)で保存されていること

$(function(){ 
    $("#RAND").button() 
    $("#RAND").click(function() { 
     val = Math.random(); 
     $("#temp").val(val); 
     Shiny.onInputChange("randval",val); 
    }); 
    $("#ADD1").button() 
}); 

注意です実際には何のためにも使用されず、削除することができます。私は問題の私の最初の公式との比較のためにコードに残しました。

関連する問題