2013-06-18 204 views
9

我遇到闪亮包困难R.闪亮 - 问题renderUI()的反应

我想了解server.R为什么‘#1选项’不工作,但评论“#选项2“确实有效。在“#Option 1”处于激活状态时,请尝试输入随机字符串并按下按钮。第一次它将文本框中的值替换为“abc”,但所有下一次都不会。在我的理解中,val()已经依赖于输入$ change,因此每次按下按钮时都必须重新执行,此外,“#Option 2”被封装到isolate()中,所以它不会添加任何反应性。

使用“#选项1”时,实际上值似乎部分变为“abc”。在Google Chrome的检测元素打开后,您可以看到“#Option 2”每次按下按钮时都会更改值,“#Option 1”也会将值更改为“abc”,但只有在按钮第一次被按下。

下面是代码:

server.R

require(shiny) 

shinyServer(function(input, output) { 

    val <- reactive({ 
    if(input$change>0) { 
    # Option 1 
     'abc' 
#  # Option 2 
#  isolate({ 
#   paste('abc',input$txt,"") 
#  }) 
    } else { 
     '' 
    } 
    }) 

    output$textbox <- renderUI({ 
    textInput("txt","Text",val()) 
    }) 

}) 

ui.R

require(shiny) 
require(shinyIncubator) 

shinyUI(pageWithSidebar(
    headerPanel('Test'), 

    sidebarPanel(
    uiOutput("textbox"), 
    actionButton("change", "Change") 
), 

    mainPanel(

) 
)) 

回答

4

在这里看到我的回应:

https://groups.google.com/d/msg/shiny-discuss/PLHauRlFw3k/AnoD7NusvDIJ

要点是,服务器保持完全相同发送相同的值到textbox输出,所以客户端是“聪明”,足以忽略它。

+0

谢谢!我通过在文本输入值的末尾添加一个空格来解决问题,并且如果输入值的末尾有空格,则删除空格,因此新值将始终与前一个值不同。无论如何,我修剪所有传入的字符串 – user1603038

1

这看起来像有可能是藏在某处有一个错误,但我可以跟踪它。

好消息是,我认为你应该可以用updateTextInput函数来实现这个效果。

但是,为了深入研究这个问题,我创建了一个bug。 https://github.com/rstudio/shiny/issues/181。如果/当我们弄清楚发生了什么,我会尝试更新这篇文章。