showModal不会在R Shiny

时间:2018-07-25 10:09:51

标签: r shiny modal-dialog shinydashboard

我正在尝试接受一些用户输入,将其与数据库中的值进行比较,然后根据输出显示模式。 我有以下示例代码:
emp_table 是我的主表,其中包含员工列表及其详细信息
emp_name 是一个包含员工姓名的文本字段
emp_id 是一个包含员工ID的文本字段
emp_info_submit 是用户在输入员工姓名和员工ID后点击的操作按钮

 library(shiny)
 library(shinydashboard)
 library(dplyr)
 #This is my master database with all the employee details
    emp_database<-data.frame("emp_name" = "Mark", "emp_id"= 103221)

    #defining the ui
    ui <- dashboardPage(
      dashboardHeader(title = "Placeholder text"),

      #Creating the appropirate navigation tabs

      dashboardSidebar(
        sidebarMenu(id = "nav_bar",
                menuItem(text = "Employee Info",tabName = "emp_info",icon = icon("info-circle"))
              )
            ),
     #Populating the Employee Info tab
      dashboardBody(tabItems(
        tabItem(
          tabName = "emp_info",
          fluidRow(
            box(
              textInput(inputId = "emp_name",label = "Enter your Name",placeholder = "enter name here",width = "100%"),
              textInput(inputId = "emp_id",label = "Enter your Employee ID",placeholder = "enter employee id here",width = "100%"),
              actionButton(inputId = "emp_info_submit",label = "Submit",icon = icon("thumbs-up"))
            )
          )
        )
      ))
     )


    server <- function(input, output) {
      observeEvent(input$emp_info_submit,{
        name1<-reactive({as.character(input$emp_name)})
        id1<-reactive({as.numeric(input$emp_id)})
        reactive({
          if(name1 %in% emp_database$emp_name){
            showModal(modalDialog("Exists"))
          }
          else{
            showModal(modalDialog("DOes not exist"))
          }
        })

      })


    }


    shinyApp(ui = ui, server = server)

基本上,我通过反复试验中学到的是,除非将用户输入值包装在反应性环境中,否则无法将其与数据库进行比较。但是,运行我的应用程序时不会触发模式。
我要去哪里错了?另外,如果我的代码写得不好,请提出一些好的编码实践。

EDIT1:还包括UI功能。

1 个答案:

答案 0 :(得分:2)

在观察者内部使用观察者很奇怪。试试:

server <- function(input, output) {

  name1 <- eventReactive(input$emp_info_submit, {
    as.character(input$emp_name)
  })
  id1 <- eventReactive(input$emp_info_submit, {
    as.character(input$emp_id)
  })
  observeEvent(input$emp_info_submit,{
    if(name1() %in% emp_database$emp_name){ # was an error here: name1 instead of name1()
      showModal(modalDialog("Exists"))
    }
    else{
      showModal(modalDialog("DOes not exist"))
    }
  })

}