R shinyBS弹出窗口
我正在做一个项目,我必须在shiny中创建一个表单。我目前在UI中有一个datatable,其中包含超链接形式的电子邮件。单击超链接后,模式窗口将打开,其中显示了要填充的各个字段。我在这里有一个保存按钮,单击该按钮后,应该会在后端更新我的数据库 我面临的问题是,我无法将每个电子邮件引用到特定的模式窗口,而我的更新查询会更新数据库中的所有记录。是否有方法将所有已单击的记录详细信息传递到模式窗口 我基本上需要知道的是如何更新我点击的记录以及弹出窗口打开的记录 我正在附加UI.R和server.R以供使用R shinyBS弹出窗口,shiny,shinydashboard,shinybs,Shiny,Shinydashboard,Shinybs,我正在做一个项目,我必须在shiny中创建一个表单。我目前在UI中有一个datatable,其中包含超链接形式的电子邮件。单击超链接后,模式窗口将打开,其中显示了要填充的各个字段。我在这里有一个保存按钮,单击该按钮后,应该会在后端更新我的数据库 我面临的问题是,我无法将每个电子邮件引用到特定的模式窗口,而我的更新查询会更新数据库中的所有记录。是否有方法将所有已单击的记录详细信息传递到模式窗口 我基本上需要知道的是如何更新我点击的记录以及弹出窗口打开的记录 我正在附加UI.R和server.R以供
enter code here
用户界面
库(闪亮)
图书馆(DT)
图书馆(shinyBS)
流动摄影(
fluidRow(
操作按钮(inputId=“view”,label=“Hi”),
#操作按钮(inputId=“savepage1”,label=“Save”),
DT::dataTableOutput('my_table'),
bsModal(“FormModal”、“我的Modal”、“文本输出”(“mytext”)、uiOutput(“form1”),
actionButton(“savepage2”,“Save”),DT::dataTableOutput(“table1”),size=“large”)
)
由于您的示例连接到数据库,并且您没有提供示例数据,因此我将使用mtcars
数据集。基于链接中的示例,您可以使用以下命令查看选定的数据:
rm(list = ls())
library(DT)
library(shiny)
library(shinyBS)
library(shinyjs)
library(shinydashboard)
# This function will create the buttons for the datatable, they will be unique
shinyInput <- function(FUN, len, id, ...) {inputs <- character(len)
for (i in seq_len(len)) {
inputs[i] <- as.character(FUN(paste0(id, i), ...))}
inputs
}
ui <- dashboardPage(
dashboardHeader(title = "Simple App"),
dashboardSidebar(
sidebarMenu(id = "tabs",
menuItem("Menu Item 1", tabName = "one", icon = icon("dashboard"))
)
),
dashboardBody(
tabItems(
tabItem(tabName = "one",h2("Datatable Modal Popup"),
DT::dataTableOutput('my_table'),uiOutput("popup")
)
)
)
)
server <- function(input, output, session) {
my_data <- reactive({
testdata <- mtcars
as.data.frame(cbind(View = shinyInput(actionButton, nrow(testdata),'button_', label = "View", onclick = 'Shiny.onInputChange(\"select_button\", this.id)' ),testdata))
})
output$my_table <- DT::renderDataTable(my_data(),selection = 'single',options = list(searching = FALSE,pageLength = 10),server = FALSE, escape = FALSE,rownames= FALSE)
# Here I created a reactive to save which row was clicked which can be stored for further analysis
SelectedRow <- eventReactive(input$select_button,{
as.numeric(strsplit(input$select_button, "_")[[1]][2])
})
# This is needed so that the button is clicked once for modal to show, a bug reported here
# https://github.com/ebailey78/shinyBS/issues/57
observeEvent(input$select_button, {
toggleModal(session, "modalExample", "open")
})
DataRow <- eventReactive(input$select_button,{
my_data()[SelectedRow(),2:ncol(my_data())]
})
output$popup <- renderUI({
bsModal("modalExample", paste0("Data for Row Number: ",SelectedRow()), "", size = "large",
column(12,
DT::renderDataTable(DataRow())
)
)
})
}
shinyApp(ui, server)
rm(list=ls())
图书馆(DT)
图书馆(闪亮)
图书馆(shinyBS)
图书馆(shinyjs)
图书馆(shinydashboard)
#此函数将为datatable创建按钮,它们将是唯一的
shinyInput看看我的例子,它不是I don’’我不喜欢原来的问题嘿,非常感谢。它解决了一些问题,但我仍然无法将数据从父窗口传递到模式窗口。selectedRow()仅发送单击的按钮编号。是否有方法将数据也传递到模式窗口?您的a
变量应该是一个被动变量,在上面的代码中,写入DB的observe
语句不知道a
是什么。尝试对数据使用reactiveValues
或reactive
表达式。另外,在大量使用数据时使用观察者也不是很明智。感谢您的快速回复。谢谢。我已将代码更改为类似于您建议的示例的模型。所以我并没有对数据使用反应式表达式,也并没有使用观察者。问题是单击数据表只返回按钮_1,而不返回行数据。我怎样才能从按键中获取行数据?嘿,谢谢,这正是我想要的。但您的EventResponsive for DataRow()并不总是有效。我正在将其转换为数据帧,以提取查询的特定值,但它有时只生成输出。不知道为什么。我想我得弄明白。无论如何,谢谢你的帮助。非常感谢。它确实有效,但您需要每次重置对该行的单击。当它将它作为问题的扩展来记忆时,我现在使用相同的输入函数创建一个复选框输入。该行显示为Check=shinyInput(checkboxInput,label=“Check”,nrow(a),“box”,value=FALSE)。将创建该复选框。是否有方法跟踪此复选框的单击事件??操作按钮的点击事件在这里不起作用。您可能应该问一个新问题,并像以前一样提供一个示例,因为这变得很混乱。凯,看起来是对的。我在这里发布了一个新问题。提前谢谢你的帮助。