我遇到了輕微的問題(bug也許?)與Shiny的書籤 - 我創建動態UI - 新的文本和數字輸入。這些輸入是通過單擊ActionButton創建的。保存書籤網址時 - 數字和文字輸入的值都在此URL中。到現在爲止還挺好。但是,加載保存的URL後,我只能看到第一個動態創建的用戶界面。我必須點擊動作按鈕來添加下一個數字和文本輸入。這些值保存在URL中,一旦添加了這些輸入,它們就會被填充正確的保存值。但是,如果你有20個這樣的按鈕,那麼它會有點不方便,你必須點擊19次才能將它們全部放到屏幕上。 這是一個簡短的可重複使用的例子。R Shiny - 書籤動態創建的用戶界面
library(shiny)
ui <- function(request){
shinyUI(fluidPage(
bookmarkButton(),
sidebarLayout(
actionButton('addElement', 'Add Element', icon("plus"), class="btn-success text-white"),
mainPanel(
id ="content"
)
)
))
}
shinyServer(function(input, output) {
enableBookmarking("url")
countvar <<- 0
observeEvent(input$addElement, {
countvar <<- countvar + 1
element <- paste0("var", countvar)
insertUI(
selector = "#content",
where = "beforeEnd",
ui = tagList(
wellPanel(
style = "display:-webkit-inline-box;width:100%",
id = element,
column(3,
textInput(element, "Element name")
),
column(3,
numericInput(paste0(element, "Value"), "Element Value", NULL)
)
)
)
)
})
})
我發現SO,遺憾的是沒有答案類似的問題 - Shiny app bookmarking: dynamic UI input lost
您需要使用'OnRestore中()'函數。看看這篇文章:https://shiny.rstudio.com/articles/advanced-bookmarking.html –
嗨芭芭拉,感謝您的鏈接。我想我會看到問題出在哪裏 - 即使是在addElement的值超過1的URL中,也只會觸發一次。然而,我不知道我應該如何將'onRestore()'函數合併到我的代碼中。我究竟應該調用什麼 - 觸發代碼的「observeElement」部分?或者乾脆在純HTML中解析?謝謝,我在這一點上有點失落。 – ledogbert