2013-02-06 21 views
5

Tôi đang cố gắng tạo một giao diện người dùng phản ứng với các thanh trượt thả vào và ra thông qua một menu thả xuống sáng bóng. Tôi có một máy chủ với thanh trượt reactiveUI (server.R):ReactiveUI sáng bóng treo với nhiều lệnh gọi uiOutput trên cùng một biến điều kiện

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) 
    }) 
}) 

tôi có thể chạy tốt máy chủ với đoạn mã sau (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(
) 
)) 

nhưng nếu tôi cố gắng làm cho cả hai conditionalPanels gọi uiOutput, máy chủ bị đóng băng:

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(
) 
)) 

tôi đã chơi xung quanh với điều này, và thấy rằng nó sẽ xảy ra bất cứ lúc nào mà sử dụng biến tình trạng tương tự và nhiều cuộc gọi uiOutput. Bất kỳ đề xuất? Cảm ơn.

+2

Thông báo lỗi trong bảng điều khiển có nội dung 'Không bắt buộc ràng buộc trùng lặp cho thanh trượt ID1'. Đoán của tôi là các biến ràng buộc xảy ra trước khi thực hiện bất kỳ câu lệnh có điều kiện nào, đó là lý do tại sao lỗi phát sinh. – Ramnath

+0

Cảm ơn Ramnath. Làm thế nào bạn nhận được thông báo lỗi để in ra bàn điều khiển? –

+2

Nếu bạn đang sử dụng Google Chrome, chỉ cần nhấp chuột phải vào trang và chọn Kiểm tra phần tử. Thao tác này sẽ mở Công cụ dành cho nhà phát triển và bạn sẽ tìm thấy tab có tên Bảng điều khiển có thông báo lỗi. Đối với Firefox, tôi tin rằng bạn có thể sử dụng FireBug. – Ramnath

Trả lời

4

Xem nhận xét từ @Joe cho câu trả lời.

Về cơ bản, outputID s và inputIDs phải là duy nhất; hai thành phần giao diện người dùng có cùng ID trên cùng một trang phát ra và lỗi. Đây là một hạn chế của phản ứng trong sáng bóng.

Công việc xung quanh từ @Jim là tạo nhiều yếu tố cho mỗi đầu ra hoặc đầu vào được khách hàng sử dụng, ví dụ:

output$slider2_1 <- ... 
output$slider2_2 <- ... 
Các vấn đề liên quan