R Shiny: используйте navbarPage с bsModal от глянцевого BS

Я пытаюсь добавить tabPanel в navbarPage, чтобы при нажатии на нее открывалось модальное окно вместо новой вкладки. Приведенный ниже фрагмент недействителен, так как tabPanel не имеет параметра id.

library(shiny)
library(shinyBS)
shinyUI(fluidPage(
    navbarPage("Sample App", id = "main_menu", 
        tabPanel("Open Modal", id = "moda")),
    bsModal("modal1", "Example", "moda", p("This is a modal"))
)

Если я отредактирую сгенерированный HTML-код из браузера, я смогу сделать это, изменив строку

<a href="#tab-9741-5" data-toggle="tab" data-value="Open Modal">Open Modal</a>

с

<a href="#" data-toggle="modal" data-target="#modal1">Open Modal</a>

на <li> элемент.

Любая идея, как это сделать или, по крайней мере, как я могу переопределить сгенерированный HTML из блестящего?

1 ответ

Решение

Одним из решений является использование Javascript для перезаписи атрибута для заголовка вкладки. Приведенный ниже код JS находит ссылку на заголовок вкладки и перезаписывает ее атрибуты.

library(shiny)

jsStr <- '$(document).ready(function(){
  $("a[data-value=\'OpenModal\']").attr({
    "href":"#", 
    "data-toggle":"modal",
    "data-target":"#modal1"
  });
})
' 

ui <- shinyUI(fluidPage(
  tags$head(tags$script(HTML(jsStr))),
  navbarPage("title",
    tabPanel("OpenModal")
  ),
  bsModal("modal1", "Example", "moda", p("This is a modal"))
))
Другие вопросы по тегам