2014-12-19 11 views
5

Sayfanın her tarafında tam olarak uzanmayan bir DataTable (tüm sıralama, arama ve sayfa özellikleriyle birlikte) almak istiyorum ve her birinde büyük miktarlarda beyaz alan oluşuyor sütun ... Sütun genişlikleri renderDataTable olmadan parlak bir uygulamanın görünümü

enter image description here

... ideal olarak sütun ile renderTable gelen "wrap" tarzı benzer genişliklerini ...

enter image description here

ben kn Bununla birlikte, göreli sütun genişliklerini düzeltebilirim, ancak tablom, seçili girdilere bağlı olarak farklı sayıda sütunla dinamik olarak güncellenecektir. Sağ taraftaki boş alana genişletmek için ek sütunlar tercih ederim ve tarayıcı penceresi genişliğinden daha geniş bir hale gelirse yatay kaydırma çubuğunu tetiklerim. Yukarıdaki resimlerde tablolardan

tekrarlanabilir örnek ...

library(shiny) 
runApp(list(
    ui = navbarPage(
    title = 'Tables', 
    tabPanel('dataTableOutput', dataTableOutput('ex1')), 
    tabPanel('tableOutput', tableOutput('ex2')) 
), 
server = function(input, output) { 
    output$ex1 <- renderDataTable(iris) 
    output$ex2 <- renderTable(iris) 
} 
)) 
+0

Sorunuzu doğrudan ele almadığını biliyorum, ancak RStudio, diğer güzel nesneler arasında yer alan R için htmlwidgets öğesini duyurdu. http://www.htmlwidgets.org/showcase_datatables.html – Khashaa

cevap

6

Sana datatables içinde drawCallback kullanması gerektiğini düşünüyorum. Burada, sadece 600px'e varan dataTable genişliğini düzeltmek için örneklerinizi biraz değiştirdim. hemen hemen her şeyi yapmak için geri arama işlevinde olası java script fonksiyonu ile oynayabilirsiniz.

library(shiny) 
runApp(list(
    ui = navbarPage(
    title = 'Tables', 
    tabPanel('dataTableOutput', dataTableOutput('ex1')), 
    tabPanel('tableOutput', tableOutput('ex2')) 
), 
    server = function(input, output) { 
    output$ex1 <- renderDataTable(iris, 
            option = list(drawCallback = I("function(settings) {document.getElementById('ex1').style.width = '600px';}"))) 
    output$ex2 <- renderTable(iris) 
    } 
)) 
0

senin data.framedf olduğunu varsayarsak, o zaman sunucu tarafında reaktif/renderTable bloğun başında bu kodu koydu. Sütun adlarını istenen uzunluğa kaydırır ve bu nedenle tablonun boyutunu azaltır. Genişliği her zaman istenen genişliğe eşit olacak şekilde değiştirebilirsiniz.

library(stringr) 

colnames(df) = str_wrap(colnames(df),width = 10) 
İlgili konular