R Shiny:dataTableProxy:选择页面未导航到任何页面:'page index out of range'
RShiny: dataTableProxy: selectPage isn't navigating to any page: 'page index out of range'
开始之前,我尝试查阅 , 和 dataTableProxy()
的文档。
我目前正在尝试拥有一个基本的 RShiny 应用程序,该应用程序在加载时自动导航到给定页面并 selects 给定行(稍后我计划让应用程序基于GET 查询字符串,但我目前使用这个基本版本作为起点)。有问题的 table 有 32 行和 4 页。和我咨询的问题相反的是,他们是通过事件触发器来实现的,而我想通过文档加载来实现。
使用 selectRows()
和 selectPage()
选择行和页非常简单。 selectRows()
提供了预期的结果;但是,selectPage()
似乎对我不起作用,在浏览器控制台中抛出 'page index out of range'。在我的示例代码中,我 select 第 25 行并导航到页面索引 2。即使尝试 select 页面索引 0 也会引发 'out of range' 错误。
我在下面提供了我的申请代码。我想知道我是否试图在 table 分页之前导航到某个页面?
非常感谢任何意见。
编辑:我有办法同时访问 select 行和转到页面,如下所示。然而,即使我转到页面索引 2,页面索引 0 的内容仍然存在。所以我必须单击另一个页面,然后返回页面索引 2 才能看到我的 selected 行。
~卡伦
library(DT)
library(shiny)
library(shinyjs)
ui <- fluidPage(
tags$head(tags$script(src="datatables.min.js")),
fluidRow(
DT::dataTableOutput("mtcar_table")
)
)
server <- function(input, output, session){
which_page <<- 0
which_row <<- 0
observe({
which_row <<- 25
which_page <<- floor(which_row/10)
output$mtcar_table = DT::renderDataTable({
# I know here I can normalize
# by the table state's rows per page attribute
# but want to just get this base exmaple
# to work first
return(
mtcars
)
},
options = list(
initComplete = JS(
"function(settings, json){",
"$(this.api().table().page(2).draw('page'));",
"console.log(this); return this;}"
)
)
)
# making sure I'm still recording the row
# and page number
print(which_row)
print(which_page)
# manipulating the table here to navigate
# to the right page and row.
# I constantly get "page index out of range"
# even if I put down page {0, 1}. I'm wondering
# if I'm trying to navigate to the page before
# the pagination actually takes place?
dataTableProxy("mtcar_table") %>%
selectRows(which_row)
})
}
shinyApp(ui, server)
加载后,您可以使用通过 ...
传递给 renderDataTable
的 options
和 selection
参数,如下所示:
library(DT)
library(shiny)
ui <- fluidPage(
tags$head(tags$script(src="datatables.min.js")),
fluidRow(
DT::dataTableOutput("mtcar_table")
)
)
server <- function(input, output, session){
output$mtcar_table <- renderDataTable({
mtcars
},
options = list(displayStart = 20),
selection = list(mode = 'multiple', selected = c(25), target = 'row') )
}
shinyApp(ui, server)
开始之前,我尝试查阅 dataTableProxy()
的文档。
我目前正在尝试拥有一个基本的 RShiny 应用程序,该应用程序在加载时自动导航到给定页面并 selects 给定行(稍后我计划让应用程序基于GET 查询字符串,但我目前使用这个基本版本作为起点)。有问题的 table 有 32 行和 4 页。和我咨询的问题相反的是,他们是通过事件触发器来实现的,而我想通过文档加载来实现。
使用 selectRows()
和 selectPage()
选择行和页非常简单。 selectRows()
提供了预期的结果;但是,selectPage()
似乎对我不起作用,在浏览器控制台中抛出 'page index out of range'。在我的示例代码中,我 select 第 25 行并导航到页面索引 2。即使尝试 select 页面索引 0 也会引发 'out of range' 错误。
我在下面提供了我的申请代码。我想知道我是否试图在 table 分页之前导航到某个页面?
非常感谢任何意见。
编辑:我有办法同时访问 select 行和转到页面,如下所示。然而,即使我转到页面索引 2,页面索引 0 的内容仍然存在。所以我必须单击另一个页面,然后返回页面索引 2 才能看到我的 selected 行。
~卡伦
library(DT)
library(shiny)
library(shinyjs)
ui <- fluidPage(
tags$head(tags$script(src="datatables.min.js")),
fluidRow(
DT::dataTableOutput("mtcar_table")
)
)
server <- function(input, output, session){
which_page <<- 0
which_row <<- 0
observe({
which_row <<- 25
which_page <<- floor(which_row/10)
output$mtcar_table = DT::renderDataTable({
# I know here I can normalize
# by the table state's rows per page attribute
# but want to just get this base exmaple
# to work first
return(
mtcars
)
},
options = list(
initComplete = JS(
"function(settings, json){",
"$(this.api().table().page(2).draw('page'));",
"console.log(this); return this;}"
)
)
)
# making sure I'm still recording the row
# and page number
print(which_row)
print(which_page)
# manipulating the table here to navigate
# to the right page and row.
# I constantly get "page index out of range"
# even if I put down page {0, 1}. I'm wondering
# if I'm trying to navigate to the page before
# the pagination actually takes place?
dataTableProxy("mtcar_table") %>%
selectRows(which_row)
})
}
shinyApp(ui, server)
加载后,您可以使用通过 ...
传递给 renderDataTable
的 options
和 selection
参数,如下所示:
library(DT)
library(shiny)
ui <- fluidPage(
tags$head(tags$script(src="datatables.min.js")),
fluidRow(
DT::dataTableOutput("mtcar_table")
)
)
server <- function(input, output, session){
output$mtcar_table <- renderDataTable({
mtcars
},
options = list(displayStart = 20),
selection = list(mode = 'multiple', selected = c(25), target = 'row') )
}
shinyApp(ui, server)