Я работаю над проектом, где мне нужно создать форму в блестящей форме. В настоящее время у меня есть данные в пользовательском интерфейсе, который имеет электронную почту в виде гиперссылки. После нажатия гиперссылки открывается модальное окно, где у меня есть другой пользовательский интерфейс, который показывает различные поля, которые необходимо заполнить. У меня есть кнопка сохранения здесь, которая должна обновлять мою БД в бэкэнд после нажатия кнопки.R shinyBS всплывающее окно
Проблема, с которой я столкнулась, заключается в том, что я не могу ссылаться на каждое письмо в этом конкретном модальном окне, и мой запрос обновления обновляет все записи в БД. Есть ли способ передать все данные записи, которые были нажаты в модальное окно?
Мне нужно знать, как обновить запись, на которую я нажал, и для которой открывается всплывающее окно?
У меня есть UI.R и server.R для использования.
enter code here
ui.R
library(shiny)
library(DT)
library(shinyBS)
fluidPage(
fluidRow(
actionButton(inputId = "view",label = "Hi")),
#actionButton(inputId = "savepage1", label = "Save"),
DT::dataTableOutput('my_table'),
bsModal("FormModal", "My Modal", "",textOutput('mytext'),uiOutput("form1"),
actionButton("savepage2","Save"),DT::dataTableOutput("table1"),size = "large")
)
enter code here
server.R
library(shinyBS)
server <- function(session, input, output){
uedata<-c("","Prime","Optimus") ##add source data here
output$form1<-renderUI({
tagList(
column(width=6,selectInput("samplevalue","Select Custom Source*",choices=c("Please select",samplevaluedata))),
column(width=6,textInput("sampletext",label = "Enter Text",value = NULL,placeholder = NULL)))
})
on_click_js = "Shiny.onInputChange('mydata', '%s');
$('#FormModal').modal('show')"
convert_to_link = function(x) {
as.character(tags$a(href = "#", onclick = sprintf(on_click_js,x), x))
}
observeEvent(input$view,{
session$sendCustomMessage(type = "unbinding_table_elements", "my_table")
output$my_table <- DT::renderDataTable({
a=dbGetQuery(hcltcprod,paste0("select name,mobile,email,assignedto from public.tempnew order by 3;"))
a <- data.frame(a,row.names = NULL)
a$email <- sapply(a$email,convert_to_link)
a1 <- datatable(a,
escape = F,
options = list(paging = FALSE, ordering = FALSE, searching = FALSE, rownames = FALSE,
preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node());}'),
drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')))
a1
})
})
observeEvent(input$my_table_cell_clicked, {
print(Sys.time())
})
observe({
if(input$savepage2==0)
return()
isolate({
for(i in 1:nrow(a))
dbGetQuery(hcltcprod,paste0("update public.tempnew set s_text='",input$samplevalue,"',s_value='",input$sampletext,"' where mobile in ('",a$email,"');"))
})
})
}
Посмотрите на мой пример, который WASN; 'т оценить его оригинальный вопрос HTTP: // StackOverflow .com/questions/38575655/shiny-modules-namespace-outside-of-ui-for-javascript-links/38584965 # 38584965 –
Эй, спасибо большое. Исправлено несколько проблем, но я по-прежнему не могу передавать данные из родительское окно в модальное окно. Выбранный параметр Row() отправляет только номер кнопки, на который нажата кнопка. Есть ли способ передавать данные и в модальное окно? –
Ваша переменная 'a' должна быть реактивной, в вашем коде выше оператор' наблюдать', который пишет в БД, не знает, что такое 'a'. Попытайтесь либо использовать выражение 'reactiveValues', либо' реактивное' для данных. Также не очень разумно использовать наблюдателей для использования тяжелых данных. –