2015-07-13 4 views
1

Я пытаюсь отправить значение переменной JavaScript из ui.R в Server.R всякий раз, когда он изменяется. Когда пользователь нажимает на ссылку, ее значение href предупреждается. До сих пор он отлично работает. Ссылки имеют видИспользование функции наблюдения в блестящей R

<a href="something.com" onclick=\"clickFunction(this.href); return false;\" target=\"_blank\">Sample link </a> 

Теперь HREF значение сохраняется в переменной link в ui.R. Я посылаю значение ссылки на server.R используя Shiny.onInputChange функция.

Но функция наблюдения в server.R не дает мне никакой ценности. Расскажите, пожалуйста, как это сделать, используя функцию наблюдения или любым другим способом, если это возможно.

ui.r

library(shiny) 
shinyUI(fluidPage(

    tags$script(HTML(" 
         function clickFunction(link){ 
          alert(link); 
          Shiny.onInputChange(\"linkClicked\",link); 
         } 
        ")) 

//rest of the code which is not related 

) 

server.R

library(shiny) 

shinyServer(function(input, output) { 

    observe({ 
    input$linkClicked 
    print(input$linkClicked) 
    }) 
}) 

ответ

3

Я не в полной мере понять, где ссылка исходит из и как приложение выглядит так как вы Ждут» t предоставить достаточно кода (например: что означает «переменная в пользовательском интерфейсе»?). Но вот небольшой пример, который показывает, как javascript отправляет информацию на сервер успешно. Я использую пакет shinyjs, который я написал в пакете.

library(shinyjs) 
jscode <- " 
shinyjs.clickfunc = function(link) { 
    alert(link); 
    Shiny.onInputChange('linkClicked', link); 
}" 

runApp(shinyApp(
    ui = fluidPage(
    useShinyjs(), 
    extendShinyjs(text = jscode), 
    textInput("link", ""), 
    actionButton("btn", "submit") 
), 
    server = function(input, output, session) { 
    observeEvent(input$btn, { 
     js$clickfunc(input$link) 
    }) 
    observe({ 
     input$linkClicked 
     print(input$linkClicked) 
    }) 
    } 
)) 

EDIT:

Если я правильно понял, как генерируются ссылки, это работает

runApp(shinyApp(
    ui = fluidPage(
    tags$script(HTML(" 
         function clickFunction(link){ 
          alert(link); 
          Shiny.onInputChange('linkClicked',link); 
         } 
        ")), 
    tags$a(href="www.google.com", onclick="clickFunction('rstudio.org'); return false;", "click me") 
), 
    server = function(input, output, session) { 
    observe({ 
     input$linkClicked 
     print(input$linkClicked) 
    }) 
    } 
)) 
+0

Пожалуйста, смотрите, я добавил информацию о том, как генерируется переменная ссылка. @daattali – alloyeduniv

+0

еще не полностью ясно. Нет никакой переменной 'link'. Вы просто используете теги $ a (...) в ui? Было бы очень полезно, если бы вы представили пример, который мы можем запустить. –

+0

Фактически ссылки создаются из веб-соскабливания. И, когда нажимается ссылка, функция onclick отправляет значение href на clickFunc (link), поэтому ссылка является аргументом функции clickFunc. alert (link) работает, значит, значение ссылки существует. – alloyeduniv

Смежные вопросы