【发布时间】:2016-07-03 13:06:21
【问题描述】:
我正在为一个学校项目开发一个闪亮的 R 仪表板,但我对反应值和观察者有疑问。 我想在用户成功登录时更新 UI(更准确地说是 selectInput)。
这是我当前的代码
global.R
db <<- dbConnect(SQLite(), dbname = "ahp_data.db")
isConnected <<- 0
#Imagine here that df will contain the model names
df <- data.frame(option1 =c("No model selected),
option2 =c("model_1","model_2")
)
reactValues <<- reactiveValues()
isConnectVar <- NULL
ui.R
library(shinydashboard)
dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
#Authentification Panel
sidebarLayout(
sidebarPanel(
titlePanel("Authentification"),
textInput('username', label="User name"),
passwordInput('password', label= "password"),
actionButton("connectButton", label='Connect'),
actionButton("subscribeButton",label='Subscribe'),
actionButton("logoutButton", label="Log out")
),
sidebarPanel(
#Input to update when logged in
selectInput("selectModelInput", label="Model selection",choices=list("No model selected")),
actionButton("newModelButton",label="New model"),
actionButton("renameModelButton", label="Rename model"),
actionButton("duplicateModelButton",label="Duplicate model"),
actionButton("loadModelButton", label='Load model'),
actionButton("deleteModelButton", label='Delete model')
)
)
server.R
connect <- function(userName,pwd){
isConnected <<- 0;
qry = paste0("SELECT password from USER where pseudo = \'",userName,"\'")
res= dbGetQuery(db,qry )
res = paste0(res)
if(res==pwd)
{
isConnected <<- 1;
print("CONNECTED")
}
else{
print("unable to connect to the database")
}
function(input, output, session) {
isConnectedVar <- reactive({
isConnected+1
})
#Authentification Panel dynamic UI
observe({
if(isConnected== 0){
reactValues$selector <<- updateSelectInput(session,"selectModelInput", label="Model selection", choices = as.character(df[[paste0(option,isConnectedVar())]]))
}
else{
reactValues$selector <<- updateSelectInput(session,"selectModelInput", label="Model selection", choices = as.character(df[[paste0(option,isConnectedVar())]]))
}
})
observeEvent(input$connectButton, {
userName= paste0(input$username)
userPwd = paste0(input$password)
connect(user = userName,pwd = userPwd)
})
我在互联网上尝试了几个教程,使用响应式、观察等,但我无法弄清楚我的代码有什么问题,你们能帮帮我吗?
提前致谢 亚历克斯
【问题讨论】:
标签: r dynamic shiny reactive-programming observers