闪亮的响应式 UI 在同一条件变量上挂起多个 uiOutput 调用
Posted
技术标签:
【中文标题】闪亮的响应式 UI 在同一条件变量上挂起多个 uiOutput 调用【英文标题】:Shiny reactiveUI hangs with multiple uiOutput calls on same condition variable 【发布时间】:2013-01-21 22:40:17 【问题描述】:我正在尝试制作一个反应式 UI,其中的滑块可以通过闪亮的下拉菜单进出。我有一个带有响应式 UI 滑块的服务器 (server.R):
library(shiny)
shinyServer(function(input, output)
output$slider1 <- reactiveUI(function()
sliderInput("s1", "slide 1", min = 1, max = 100, value = 1)
)
output$slider2 <- reactiveUI(function()
sliderInput("s2", "slide 2", min = 1, max = 100, value = 1)
)
)
我可以使用以下代码 (ui.R) 正常运行服务器:
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Hello Shiny!"),
sidebarPanel(
selectInput("dataset", "number of buckets:",
choices = c(1,2,3)),
conditionalPanel(
condition = "input.dataset==2",
uiOutput("slider1"),uiOutput("slider2")),
conditionalPanel(
condition = "input.dataset==1",
sliderInput("s1", "slide 1", min = 1, max = 100, value = 1)
)
),
mainPanel(
)
))
但如果我尝试让两个条件面板都调用 uiOutput,服务器会冻结:
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Hello Shiny!"),
sidebarPanel(
selectInput("dataset", "number of buckets:",
choices = c(1,2,3)),
conditionalPanel(
condition = "input.dataset==2",
uiOutput("slider1"),uiOutput("slider2")),
conditionalPanel(
condition = "input.dataset==1",
uiOutput("slider1")
)
),
mainPanel(
)
))
我玩过这个,发现任何时候使用相同的条件变量和多个 uiOutput 调用都会发生这种情况。有什么建议?谢谢。
【问题讨论】:
控制台中的错误信息为Uncaught Duplicate binding for ID slider1
。我的猜测是绑定变量发生在执行任何条件语句之前,这就是引发错误的原因。
感谢拉姆纳特。您是如何将错误消息打印到控制台的?
如果您使用的是谷歌浏览器,只需右键单击页面并选择检查元素。这将打开开发人员工具,您将找到一个名为 Console 的选项卡,其中包含错误消息。对于 Firefox,我相信你可以使用 FireBug。
我建议您在Shiny Google Group 上发布此内容以获得更快的答复。
不只是每个响应式UI调用只能有一个唯一ID——输出ID必须是唯一的,句点(输入ID也一样)。如果您在页面上同时有两个具有相同 ID 的输出,则应将其视为应用程序中的错误,无论它们是如何创建的。
【参考方案1】:
请参阅@Joe 的评论以获得答案。
基本上,outputID
s 和 inputIDs
必须是唯一的;同一页面上具有相同 ID 的两个 UI 元素发出并出错。这是闪亮的反应性的限制。
@Jim 的解决方法是为客户端使用的每个输出或输入创建多个元素,例如
output$slider2_1 <- ...
output$slider2_2 <- ...
【讨论】:
以上是关于闪亮的响应式 UI 在同一条件变量上挂起多个 uiOutput 调用的主要内容,如果未能解决你的问题,请参考以下文章