В настоящее время я разрабатываю модуль R-Shiny, который создает таблицу DT
, включающую подкачку страниц. По умолчанию DT
тип подкачки по умолчанию - "simple_numbers"
. Моя цель состоит в том, чтобы изменить тип подкачки по умолчанию на "simple"
(см. DataTable pagingType Documentation ).
Хотя я не нашел ничего специфического для R-Shiny, были некоторые сообщения SOчто я нашел связанным с моей задачей ( это самая полезная ), но, к сожалению, я действительно не добился прогресса.
Мои текущие попытки были:
- Я попытался вставить в пользовательский интерфейс:
shiny::tags$script(
shiny::HTML(paste0('
$(document).ready(function() {
$("#', ns(name), '").dataTable({
"pagingType": "simple",
"sPaginationType": "simple"
});
});')))
Но получил следующую ошибку:
jquery.min.js:2 jQuery.Deferred exception: $(...).dataTable is not a function TypeError: $(...).dataTable is not a function
Я включил это в опцию
DT::datatable()
object
callback
:
callback = DT::JS(paste0('
// * Examine the table
tableObject = table.settings()[0];
console.log(table.settings());
// * Pagination Type
tableObject.sPaginationType = "simple";
'))
Однако, хотя в консоли инспектора нет ошибок, тип нумерации страниц не изменяется.
Итак, в этот момент я немного озадачен и задаюсь вопросом, может ли кто-нибудь помочь мне преодолеть разрыв между документацией и публикацией SO и моей текущей логикой.
Чтобы помочь ответить на этот вопрос, я создал очень простой воспроизводимый пример каждой из моих попыток ниже с предварительно загруженными данными из R.
Попытка 1:
table_ui = function(id, name = "table") {
# * Create a namespace function using the provided id
ns = shiny::NS(id)
# * Build HTML shiny taglist for table view
shiny::tagList(
shiny::tags$script(
shiny::HTML(paste0('
$(document).ready(function() {
$("#', ns(name), '").dataTable({
"pagingType": "simple",
"sPaginationType": "simple"
});
});'))),
DT::dataTableOutput(outputId = ns(name))
)
}
table_server = function(input, output, session, name = "table") {
# * Extract Data ----
data_df = shiny::reactive({ datasets::mtcars })
# * Produce HTML Table ----
# * NOTE: Transform "data_df()" into HTML table
output[[name]] = DT::renderDataTable({
# * Build HTML table
DT::datatable(
data_df(),
rownames = FALSE,
options = list(
paging = TRUE,
pageLength = 5,
dom = "<f<t>ip>"
)
)
})
# * Return
return(data_df)
}
# * Create simple app
# * Define UI
ui = shiny::fluidPage(
table_ui(id = "test", name = "report"),
)
# * Define Server
server = function(input, output, session) {
# * Extract text input
shiny::callModule(
module = table_server,
id = "test",
session = session,
name = "report")
}
# * Build App
shiny::shinyApp(ui = ui, server = server)
Попытка 2:
table_ui = function(id, name = "table") {
# * Create a namespace function using the provided id
ns = shiny::NS(id)
# * Build HTML shiny taglist for table view
shiny::tagList(
DT::dataTableOutput(outputId = ns(name))
)
}
table_server = function(input, output, session, name = "table") {
# * Extract Data ----
data_df = shiny::reactive({ datasets::mtcars })
# * Produce HTML Table ----
# * NOTE: Transform "data_df()" into HTML table
output[[name]] = DT::renderDataTable({
# * Build HTML table
DT::datatable(
data_df(),
rownames = FALSE,
options = list(
paging = TRUE,
pageLength = 5,
dom = "<f<t>ip>"
),
# ** JS Support ----
# * NOTE: Define JS to modify table
callback = DT::JS(paste0('
// * Examine the table
tableObject = table.settings()[0];
console.log(table.settings());
// * Pagination Type
tableObject.sPaginationType = "simple";
'))
)
})
# * Return
return(data_df)
}
# * Create simple app
# * Define UI
ui = shiny::fluidPage(
table_ui(id = "test", name = "report"),
)
# * Define Server
server = function(input, output, session) {
# * Extract text input
shiny::callModule(
module = table_server,
id = "test",
session = session,
name = "report")
}
# * Build App
shiny::shinyApp(ui = ui, server = server)