R Shiny - Геттеры и сеттеры для блестящих входов - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть список из двух входных данных, inputs, который содержит selectInput и checkboxInput.Я хотел бы пройтись по этому списку входов, 1) извлечь тег метки каждого входа и затем 2) установить стиль каждого тега метки в исходном списке до display:none;.Мне было интересно, есть ли в пакете Shiny функции получения и установки для этого?

Самой близкой вещью, которую я смог найти, была эта статья о построении пользовательских вводов , но геттеры - это функции JS.

Поэтому я прибег к определению своей собственной функции, которая рекурсивно просматривает список входов и использует некоторые методы получения из htmltools:

library(shiny)
library(htmltools)

getLabel2 <- function(children) {

  lapply(children, function(x) {

    if(inherits(x, 'shiny.tag')) {

      if(x$name == 'label') {

        return(x)

      } else {

        chldn = x$children

        if(is.list(chldn)) getLabel2(chldn)

      }
    }
  })
}


getLabel <- function(inputs) {

  lapply(inputs, function(x) {

    if(grepl('shiny-input-container', tagGetAttribute(x, 'class'))) {

      tagGetAttribute(x, 'id')

      getLabel2(x$children)

    } else {

      return(x)

    }
  })
}

labels = getLabel(inputs)

Однако с этой функцией есть некоторые проблемы:

  1. Возвращает список, содержащий теги меток и NULL s вместо тегов без меток - как я могу изменить его так, чтобы он возвращал список длины 2, где первый элемент - этотег label для входа 1, а второй элемент - это тег label для входа 2?
  2. Он не проверяет, соответствует ли извлекаемый тег label соответствующему входному тегу этого shiny-input-container.Я думал, что вы могли бы сделать это, проверив, что атрибут for тега label (полученный с помощью tagGetAttribute(label_tag, 'for')) соответствует атрибуту id соответствующего входного тега (полученного с помощью tagGetAttribute(input_tag, 'id')) - но я нене знаю, возможно ли это, поскольку входной тег не легко идентифицировать.Разрешено ли shiny-input-container иметь только один дочерний тег?Если это так, то эта проверка не нужна.
...