【发布时间】: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 的输出,则应将其视为应用程序中的错误,无论它们是如何创建的。