Shiny Отправить простую строку с сервера на пользовательский интерфейс

Я столкнулся с проблемой, которую, вероятно, тоже легко решить, но она меня беспокоит.

У меня есть скрипт глобальный.R, в котором я использую JS для вычисления высоты экрана.

jscode_for_screen_Height <- '$(document).on("shiny:connected", function(e) {
                             var jsHeight = screen.height; 
                             Shiny.onInputChange("GetScreenHeight",jsHeight); });'

Эта переменная используется в нескольких частях моего сервер.R и работает правильно. Например.

output$viewDataCTgov <- DT::renderDataTable({
DT::datatable(data_to_render_CTgov(),
options = list(scrollX = TRUE,scrollY = paste(input$GetScreenHeight,"px",sep = ""), 
scrollCollapse=TRUE,pageLength =  100,searchHighlight = TRUE), escape = FALSE)
})

Сейчас создаю карту листовки и в ui.R у меня есть

 leafletOutput("mymap", height = XXX )

leafletoutput принимает строку в качестве параметра высоты (например, «400»)

Вот проблемы:

1) Я не могу использовать input$GetScreenHeight, потому что я нахожусь на ui.R, а ввод не входит в область действия скрипта.

2) Я не могу понять, как передать простую строку в ui.R из сервер.R

То, что я пробовал до сих пор, это использовать в сервер.R

output$ScreenHeightvalue <- paste0(input$GetScreenHeight)

А в ui.R

leafletOutput("mymap", height =(textOutput("ScreenHeightvalue")))

но не работает из-за того, что textOutput("ScreenHeightvalue") не является простой строкой.

Как передать paste0(input$GetScreenHeight) из сервер.R в ui.R в виде простой строки?

Простым способом было бы использовать renderUI() : это функция для создания объектов пользовательского интерфейса на сервере. shining.rstudio.com/reference/shiny/0.14/renderUI.html

gdevaux 18.06.2019 11:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
1 007
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не знаю, как передать простую строку с сервера на пользовательский интерфейс, но вы можете определить свой lealfetOutput на сервере с помощью renderUI.

library(shiny)
library(leaflet)

ui <- fluidPage(
  uiOutput("test")
)

server <- function(input, output) {
  output$myMap <- renderLeaflet({
    leaflet() %>%
      addTiles() %>%
      setView(-93.65, 42.0285, zoom = 17)
  })

  output$test <- renderUI({
    tagList(
      leafletOutput("myMap", height = paste0(input$GetScreenHeight))
    )
  })
}
shinyApp(ui, server)

Спасибо! Вы спасатель!

Roberto 18.06.2019 16:13

Другие вопросы по теме