You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DTEdit中selectInput下拉选项空白问题排查求助

问题排查与解决方法

你的DTedit下拉框空白的核心原因是:直接从reactiveValues中提取列名传给dtedit的input.choices时,dtedit无法正确解析非reactive上下文里的动态数据引用。以下是两种可行的修复方案:

方案1:静态数据提取(适合初始化后不动态更新的数据)

如果你的PY/CY数据是固定的初始化数据,直接把数据从reactiveValues中提取到普通变量,再传给input.choices即可:

server <- function(input, output, session) {
  
  # 提前提取静态数据到普通变量
  py_data <- data.frame('col1a'=1:10, 'col2a'=11:20, 'col3a'=21:30)
  cy_data <- data.frame('col1b'=1:10, 'col2b'=11:20, 'col3b'=21:30)
  
  data_dir <- reactiveValues(
    data=list(
      'PY Data'=py_data,
      'CY Data'=cy_data
    )
  )
    
  # 其余UI渲染代码不变...
  
  Mapping_Table_Results <- dtedit(
    input, output,
    name = 'Mapping_Table',
    thedata = format_default_mapping_table(MAPPING_TABLE),
    edit.cols = c('PY Field', 'CY Field'),
    show.copy = FALSE,
    input.types = list(
      'PY Field' = 'selectInput',
      'CY Field' = 'selectInput'
    ),
    # 使用普通变量的列名
    input.choices = list(
      'PY Field' = names(py_data),
      'CY Field' = names(cy_data)
    )
  )
  
}

方案2:Reactive选项生成(适合数据动态更新的场景)

如果后续需要支持用户上传数据等动态更新场景,把input.choices包装成reactive表达式,让dtedit能响应数据变化:

server <- function(input, output, session) {
  
  data_dir <- reactiveValues(
    data=list(
      'PY Data'=data.frame('col1a'=1:10, 'col2a'=11:20, 'col3a'=21:30),
      'CY Data'=data.frame('col1b'=1:10, 'col2b'=11:20, 'col3b'=21:30)
    )
  )
  
  # 用reactive生成下拉选项,自动响应data_dir的变化
  mapping_choices <- reactive({
    list(
      'PY Field' = names(data_dir$data[['PY Data']]),
      'CY Field' = names(data_dir$data[['CY Data']])
    )
  })
    
  # 其余UI渲染代码不变...
  
  Mapping_Table_Results <- dtedit(
    input, output,
    name = 'Mapping_Table',
    thedata = format_default_mapping_table(MAPPING_TABLE),
    edit.cols = c('PY Field', 'CY Field'),
    show.copy = FALSE,
    input.types = list(
      'PY Field' = 'selectInput',
      'CY Field' = 'selectInput'
    ),
    # 直接传入reactive表达式,而非调用它
    input.choices = mapping_choices
  )
  
}

额外注意点

  • 确保format_default_mapping_table生成的初始数据中,PY Field和CY Field的行数与Standard Field一致(你的代码中c('')会自动循环填充3行,没问题);
  • 如果需要允许用户选择空值,可以在选项开头添加占位符,比如c(''='-- 请选择 --', names(py_data))。

内容的提问来源于stack exchange,提问作者big_cactus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:05:10