2015-07-10 77 views
6

我有單擊時,閃亮的HTML按鈕,調用JavaScript函數geocodeAddressStreet(...).js文件中/www目錄:如何在Shiny中同時調用JavaScript和R代碼按鈕?

tags$body(tags$input(type = "button", 
        value = "Next", 
        id = "button1", 
        onClick = "geocodeAddressStreet(houseNumber,streetName,addressCity,addressState)"))), 

但我無法弄清楚如何得到這個按鈕調用時,第二個文件點擊,比方說foo.R。這兩個程序都是獨立運行的,但似乎沒有辦法在Shiny中的HTML元素中添加inputId。我們目前有兩個不同的按鈕,其中一個調用R代碼,另一個調用JavaScript代碼,但這顯然是不切實際的解決方案。

+0

在'server.r'中,你不能只設置一個'observe()',當按鈕被點擊時會調用腳本嗎? –

+0

雖然你不需要'inputId'嗎?據我所知,這個按鈕只有一個標準的HTML ID。 –

+0

標準'actionButton'閃亮功能有什麼問題? – nicola

回答

6

所以你想有一個按鈕,當你點擊它,javascript函數和一些R代碼被調用?我能夠從shinyjsonclick功能來做到這一點(免責聲明:我寫的包)

library(shinyjs) 

jsCode <- " 
shinyjs.geocodeAddr = function(params) { 
    alert('JavaScript called!'); 
    // geocodeAddressStreet(...) 
} 
" 

runApp(shinyApp(
    ui = fluidPage(
    useShinyjs(), 
    extendShinyjs(text = jsCode), 
    actionButton("btn", "Click me") 
), 
    server = function(input, output, session) { 
    onclick("btn", { 
     js$geocodeAddr() 
     cat("R called as well") 
    }) 
    } 
)) 

基本上,onclick功能是在點擊按鈕時將運行的R功能。在它內部,你可以很容易地調用R代碼,但你也可以使用shinyjs包調用JS代碼 - 這就是我撥打js$geocodeAddr的方式。看看extendShinyjs函數。或者,您也可以使用的常用方法session$sendCustomMessage(...)

+0

Thanks!我即將嘗試這個。但是,如何將JavaScript保存在單獨的文件中?就像jsCode < - 「(javaScript代碼)」一樣,jsCode < - load(blah.js) –

+0

'extendShinyjs(script =「path/to/js」)'而不是'text'參數。因此,我的建議「看看'extendShinyjs'函數 - 閱讀它的文檔,它需要5分鐘,但可能會讓你的生活更輕鬆:)(希望) –

相關問題