光沢のあるモジュールを使用して、同じプレゼンテーションを共有する3つの異なるデータセットを表示するためにUIとサーバーコードを再利用しようとしています。JavaScriptモジュールのUIの外にある光沢のあるモジュールの名前空間
UI /サーバーコードの外でjavascriptベースのモーダルポップアップリンクの作成を使用しているときに、ネームスペースを扱うための挑戦が少しあります。ここで
は私の非稼働のアプリのコードです:
library(shiny)
library(shinyBS)
library(DT)
df <- data.frame(id = c('a', 'b', 'c'), value = c(1, 2, 3))
on_click_js = "
Shiny.onInputChange('myLinkName', '%s');
$('#myModal').modal('show')
"
convert_to_link = function(x) {
as.character(tags$a(href = "#", onclick = sprintf(on_click_js, x), x))
}
df$id_linked <- sapply(df$id, convert_to_link)
df <- df[, c('id_linked', 'value')]
mySampleUI <- function(id) {
ns <- NS(id)
fluidPage(
mainPanel(
dataTableOutput(ns('myDT')),
bsModal(id = 'myModal',
title = 'My Modal Title',
trigger = '',
size = 'large',
textOutput(ns('modalDescription'))
),
width = 12
)
)
}
ui <- fluidPage(mySampleUI('myUI'))
myServerFunc <- function(input, output, session, df) {
output$myDT <- DT::renderDataTable({
datatable(df, escape = FALSE, selection='none')
})
output$modalDescription <- renderText({
sprintf('My beautiful %s', input$myLinkName)
})
}
server <- function(input, output) {
callModule(myServerFunc, 'myUI', df)
}
shinyApp(ui = ui, server = server)
作業バージョンが正常にモーダルポップアップの記述部分にmyLinkName
を表示していました。このコードが機能しない理由は、UIコンポーネントID値が名前空間の包含を伴わずにUIコードの外部で作成されるためです。私はそれを得る。しかし、私は名前空間が一致するようにそれを再加工する方法を理解することができません。
アイデア/オプションはありますか?
プロットのタイトルがクリックされた行に基づいて変化することに注意してください。とにかく、私は地球環境の中でShiny 'namespace'を作成し、' paste'を使ってJavaScriptのリンクをつなぎ合わせる方法を考え出しました。ハッキーコードには満足していませんが、そのトリックを行うようです。 'ns < - NS( 'myUI')';次に、on_click_js = paste( "Shiny.onInputChange( '"、ns(' myLinkName ')、'、 '%s'); $( '#myModal')。modal( 'show') "、sep =" ")' – Gopala
私のために非常に便利です。しかし、同じボタンを2回クリックしても機能しません。値が更新されないため、モーダルをトリガするものは何も表示されません。 –