Метка не отображается для слайдераTextInput

avatar
Phil Smith
1 июля 2021 в 19:22
175
1
0

Я использую виджет sliderTextInput из пакета shiningWidgets. Ползунок работает нормально, но моя метка для ползунка не отображается. Вместо моей метки отображается «[object Object]». Как я могу исправить эту проблему? Вот мой репрекс.

# reprex for slider problem
library(shiny)
library(shinyWidgets)

dateD <- seq.Date(as.Date("2017-01-01"),
    Sys.Date()-1,by="day")
dateC <- character()
for (i in 1:length(dateD)) {
    dateC[i] <- format(dateD[i],"%b %d, %Y")
}
strtRang <- c(dateC[1],dateC[length(dateC)])

ui <- fluidPage(
    sliderTextInput("Dates",
        label="Choose starting and ending dates:",
        choices=dateC,
        selected=strtRang,
        dragRange = TRUE,
        width="100%")
)
server <- function(input, output,session) {
    observe({
        updateSliderTextInput(session,inputId="Dates",
            tags$b(tags$span(style="color:blue",
            label="Choose starting and ending dates:")),
            choices = dateC,
            selected=strtRang)
    })
}
shinyApp(ui, server)
Источник
Skaqqs
1 июля 2021 в 19:47
0

Вы пытались заменить tags$b(tags$span(style="color:blue", label="Choose starting and ending dates:")) на label="Choose starting and ending dates:"?

MrFlick
1 июля 2021 в 19:53
1

Кажется, у вас проблема с вложением. Вы передаете label= функции tags$span(), а не функции updateSliderTextInput().

Ответы (1)

avatar
lz100
1 июля 2021 в 20:17
1

Причина в том, что label ожидает строку, а не объект класса shiny.tag. Даже если вы предоставите строку HTML, например <b>xxxxx</b>, она все равно не будет работать, потому что создатель этой функции не разрешил вам вводить HTML, только строку. Строка, которую вы предоставите, будет тем, что вы увидите, без разбора HTML.

Если вы хотите динамически добавлять цвет и толщину шрифта, сделайте следующее:

# reprex for slider problem
library(shiny)
library(shinyWidgets)
library(shinyjs)
dateD <- seq.Date(as.Date("2017-01-01"),
                  Sys.Date()-1,by="day")
dateC <- character()
for (i in 1:length(dateD)) {
  dateC[i] <- format(dateD[i],"%b %d, %Y")
}
strtRang <- c(dateC[1],dateC[length(dateC)])

ui <- fluidPage(
  shinyjs::useShinyjs(),
  sliderTextInput("Dates",
                  label='Choose starting and ending dates:',
                  choices=dateC,
                  selected=strtRang,
                  dragRange = TRUE,
                  width="100%")
)
server <- function(input, output, session) {
  observe({
    updateSliderTextInput(session,inputId="Dates",
                          label = "Choose starting and ending dates aaaa:",
                          choices = dateC,
                          selected=strtRang)
    shinyjs::runjs("$('.shiny-input-container:has(input[id=\"Dates\"]) > label').css({fontWeight: 900, color: 'blue'})")
  })
  
}
shinyApp(ui, server)

Если стиль не нужно задавать динамически, проще:

ui <- fluidPage(
  sliderTextInput("Dates",
                  label='Choose starting and ending dates:',
                  choices=dateC,
                  selected=strtRang,
                  dragRange = TRUE,
                  width="100%"),
  tags$script(HTML("$('.shiny-input-container:has(input[id=\"Dates\"]) > label').css({fontWeight: 900, color: 'blue'})"))
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
Phil Smith
1 июля 2021 в 20:51
0

Я обнаружил, что в моем исходном приложении решение работает для отображения метки, но не для ее синего цвета. Ползунок находится в блестящем модуле в моем приложении (хотя и не в моем репрексе), и я подозреваю, что это влияет на скрипт js.

lz100
1 июля 2021 в 21:04
1

В модуле вам нужно изменить идентификатор внутри input[id=\"Dates\"], он будет input[id=\"ModuleID-Dates\"]

Phil Smith
4 июля 2021 в 00:41
0

Я также хочу сделать размер шрифта 26px, но когда я добавляю "font-size: 26px" в скрипт следующим образом: css({fontWeight: 900, font-size: 26px, color: 'blue'}) синий цвет возвращается к черному, а размер шрифта не изменяется. Это почему?

lz100
5 июля 2021 в 19:59
1

Мы используем JavaScript для установки атрибутов CSS, дефис - не принимается, вместо него нужно использовать fontSize

Phil Smith
7 июля 2021 в 18:57
0

Я тоже пробовал (fontSize: 26px), но это не работает. В сумме: fontWeight: 900, цвет: «синий» работает нормально, но fontWeight: 900, fontSize: 26px, цвет: «синий» дает черный цвет с нормальным весом и без изменения размера шрифта.

lz100
7 июля 2021 в 20:11
1

опять же, это не обычный CSS, поэтому используйте {fontWeight: 900, color: 'blue', fontSize: '26px'}. Он должен быть '26px' в кавычках. 26px без кавычек означает объект с именем this, но вам нужна строка, а не объект. Когда он не может найти объект 26px, вызывает ошибку.

Phil Smith
7 июля 2021 в 21:44
0

Это работает. Спасибо, что остаетесь со мной в этом. Я пытаюсь изучить Javascript, но мне еще предстоит пройти долгий путь. Ваше терпение ценится.