2013-06-18 123 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。如果/當我們弄清楚發生了什麼,我會嘗試更新這篇文章。