我正在尝试为派对创建一个简单的卡拉OK队列应用程序。我有一个DataTable存储我的卡拉OK歌曲集。我想点击歌曲列表中的一个项目,并将其添加到第二个DataTable中,该DataTable将成为一个队列。我希望随后点击的歌曲被添加到队列表中。但是,我尝试对此进行编码导致队列列表不持久。它只在列表中有一个轨道。
如何使用闪烁的DataTable中的单击单元格迭代地向元素添加元素?
server.R
queue <- list()
shinyServer(function(input, output) {
output$myTable <- renderDataTable({df}, options = list(bSortClasses = TRUE), callback = "function(table) {
table.on('click.dt', 'tr', function() {
Shiny.onInputChange('rows',
table.row(this).data());
});}")
# if data table is clicked, add to the queue
observe({
if (!is.null(input$rows)) {
queue[[length(queue) + 1]] <- input$rows[3]
dfq <- data.frame('FileName'=unlist(queue))
output$queue <- renderDataTable({dfq}, callback = "function(table) {
table.on('click.dt', 'tr', function() {
Shiny.onInputChange('play',
table.row(this).data());
});}")
}
})
observe({
if (!is.null(input$play)){
# grab the row from the data.frame
selection <- df[df[,3] == input$play, ]
play.music(selection)
}
})
})
ui.R
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Karaoke!"),
sidebarPanel(
selDataTableOutput("queue")
),
mainPanel(
selDataTableOutput("myTable")
)
)
)
答案 0 :(得分:0)
您可以将矢量存储到文件中。当您开始新的Shiny会话时,您定义一个空文件(例如cat(“”,nameFile.txt))。当您单击一个单元格时,您将新元素附加到该文件(例如cat(newElement,nameFile.txt,append = TRUE))并将该文件作为向量读取(例如,使用read.table)。