【问题标题】:shiny app how to update part of a uiOutput block instead of the whole block闪亮的应用程序如何更新 uiOutput 块的一部分而不是整个块
【发布时间】:2017-04-02 02:21:01
【问题描述】:

您好,我有一个闪亮的应用程序,它应该从数据库中读取配置列表并提示用户配置列表。

列表依赖于一些 GET 参数,根据它们,列表可以不同。

我尝试了两种方法:

  1. 在 ui.R 中,我只放了一个大的 uiOutput 元素,在它的实现中(在 server.R 中)我将进行 lapply 和 foreach 配置,我将输出一个包含一些元素的流体行。

    ui.R:
    uiOutput("serversList")
    
    server.R:
    output$serversList <- renderUI({
        lapply( get.servers()$server, function(servName) {...
    
  2. 在 ui.R 中,我根据来自数据库的列表放置了一个 lapply,对于每个配置,我将输出一个带有新输出对象的 fluidRow。在 server.R 中,我根据来自数据库的相同列表放置了另一个 lapply,并且对于每个配置,我将定义在 ui.R 中动态定义的每个输出对象的实现

    ui.R
    fluidRow(
       box(width=12, 
    
          lapply(get.servers()$server, function(serv) {...
          list(
              uiOutput(paste0('conf', serv)),...
    
    server.R
    lapply(get.servers()$server, function(servName) {
        output[[paste0('conf', servName)]] <- renderUI({...
    

解决方案 1 有效,但每次我更改某些配置时,整个配置列表都会刷新,并且用户设置的值会丢失。 我需要一种方法来控制什么时候应该更新什么对象。

如果我从数据库(在 server.R 中)获取数据,则解决方案 2 不起作用。

如果我改为从 global.R 中的纯文本文件中获取数据,则解决方案 2 有效,并且我可以控制什么时候应该更新什么对象,因为当其中使用的输入对象发生变化时,每个输出对象都会被刷新。

有没有解决方案3?还是可以固定1/2?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我找到了解决方案。 我可以修复解决方案 1,并且 inside 为 serversList 渲染 UI 我可以定义其他渲染UI,返回一个fluidRow,其中uiOutput 与渲染UI 连接。

    长话短说:将解决方案 2 嵌套在解决方案 1 中。

    猜你喜欢
    • 2015-09-08
    • 2016-06-24
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多