2015-07-10 12 views
6

Ben tıkladığı Shiny bir HTML düğmesine sahip, /www dizininde bir .js dosyada JavaScript işlevini geocodeAddressStreet(...) çağırır:Paralel olarak hem JavaScript hem de R kodunu çağırmak için Parlak'da nasıl bir düğme alabilirim?

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

Ancak zaman ikinci bir dosya aramak için bu düğmeyi nasıl çözemiyorum tıklandığında, foo.R diyelim. Her iki prosedür de bağımsız olarak çalışır, ancak Shiny'ta bir HTML öğesine inputId eklemenin bir yolu yoktur. Şu anda biri R kodu ve diğeri JavaScript kodunu çağıran iki farklı buton var, fakat bu pratik olmayan bir çözüm.

+0

yaklaşımını da kullanabilirsiniz. "Server.r" düğmesine tıklattığınızda komut dosyasını çağıran bir "observe()" kuramıyor musunuz? –

+0

Yine de 'inputId' öğesine ihtiyacınız yok mu? Bu düğme, söyleyebileceğim kadarıyla standart bir HTML kimliğine sahip. –

+0

Standart 'actionButton' parlak işleviyle ilgili sorun nedir? – nicola

cevap

6

Yani bir düğmeniz olsun ve tıkladığınızda, hem javascript işlevi hem de bazı R kodu aranıyor mu?

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") 
    }) 
    } 
)) 

Temelde, onclick fonksiyon düğmesi tıklandığında çalışacak bir R fonksiyonudur: (ı paketi yazdım reddi) Ben shinyjs paket dan onclick fonksiyonu ile bunu başardı. İçerisinde R kodunu kolayca arayabilirsin, ama aynı zamanda parlak kod paketini kullanarak JS kodunu da arayabilirsin - ben de js$geocodeAddr numaralı telefonu aradım. extendShinyjs işlevine bakın. Alternatif olarak, kullanmak yerine, her zamanki gibi session$sendCustomMessage(...)

+0

Teşekkürler! Bunu denemek üzereyim. JavaScript'i ayrı bir dosyada tutarken bunu nasıl yapabilirim? JsCode <- "(javaScript kodu)" yerine, "text" parametresi yerine jsCode <- load (blah.js) –

+0

'extendShinyjs (script =" yol/to/js ")' yerine. Bu yüzden benim önerim "extendShinyjs" işlevine bakın - belgelerini okuyun, 5 dakika sürecektir, ancak hayatınızı kolaylaştırabilir:) (umarım) –

İlgili konular