Установка значения textInput по умолчанию в R блестящий с помощью js (как результат функции js) - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу использовать блестящее приложение R с js SDK одной социальной сети.Я хочу получить идентификатор пользователя из js API и установить его в качестве значения по умолчанию для формы textInput.Но только один раз, в первый раз.

Лучший результат, которого мне удалось достичь, используя функцию Shiny.onInputChange() (или Shiny.setInputValue() для блестящего> 1.1)

Пример игрушки:

ui <- fluidPage(

 textInput("uid",label = h4("Input ID"),value = "1"),
 actionButton("goButton", "Check this out!", class="btn-primary"),

 # getting user id via js
 tags$script(HTML(
  '
  uid = some_js_code;
  console.log("My uid - " + uid);

  // setting new value for input$uid variable
  Shiny.onInputChange("uid", uid);
  // for newer version of shiny 
  //Shiny.setInputValue("uid", uid);
  '
)

server <- function(input, output, session) {

  user<-reactive({

  input$goButton    
  user <- some_function_for_uid(input$uid)

  })

}

Проблемы:

  1. При первой загрузке приложения значение переменной "uid" не меняется.Значение остается таким же, каким оно было в функции textInput (value="1")

  2. Серверная функция some_function_for_uid() получает новое значение переменной только , когда я нажимаю goButton.Но значение в текстовой форме остается прежним.

Как правильно изменить значение по умолчанию в textInput и избежать описанных проблем?Заранее спасибо.

1 Ответ

1 голос
/ 08 апреля 2019

Для обновления значения в textInput:

$("#uid").val(uid);

Я не знаю, что вы хотите сделать с кнопкой. Это нормально, как это:

ui <- fluidPage(

  textInput("uid", label = h4("Input ID"), value = "1"),
  verbatimTextOutput("showUID"),
  #actionButton("goButton", "Check this out!", class="btn-primary"),

  tags$script(HTML(
    '
    uid = "hello";

    // setting new value in the textInput
    $("#uid").val(uid);

    // setting new value for input$uid variable
    Shiny.onInputChange("uid", uid);
    '
  ))

)

server <- function(input, output, session) {

  user <- eventReactive(input$uid, {
    rep(input$uid, 3)
  })

  output[["showUID"]] <- renderText({user()})

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...