2016-09-28 2 views
0

ändern Hintergrundfarbe von mehreren Reihen in rhandsontable

library("rhandsontable") 
rhandsontable(data.frame(ID=1:5,var1=rnorm(5), var2=letters[1:5])) %>%  
hot_col(c(1,3), 
    renderer = "function(instance, td, row, col, prop, value, cellProperties) { 
    Handsontable.TextCell.renderer.apply(this, arguments); 
    td.style.background = 'lightblue'; 
    }" 
) 

einer Verwendung kann die Hintergrundfarbe für ausgewählte Spalten definieren, hier Spalten 1 und 3

Ist es möglich, das gleiche gilt für ausgewählte Zeilen zu tun?

Dies funktioniert, wenn ich die Zeilen direkt Referenz:

library("rhandsontable") 
rhandsontable(data.frame(ID=1:5,var1=rnorm(5), var2=letters[1:5])) %>% 
hot_cols(
    renderer = "function(instance, td, row, col, prop, value, cellProperties) { 
    Handsontable.TextCell.renderer.apply(this, arguments); 
    if (row==1 || row==3 || row==4) td.style.background = 'lightblue'; 
    }" 
) 

Allerdings habe ich die Zeilenindizes in einem Vektor, dass ich etwas in dieser Richtung versorgen möchte, (was nicht, vermutlich becasue funktioniert die Renderer-Funktion kann sehen myindex nicht):

myindex <- c(1, 3, 4) 
rhandsontable(data.frame(ID=1:5,var1=rnorm(5), var2=letters[1:5])) %>% 
hot_cols(
    renderer = "function(instance, td, row, col, prop, value, cellProperties) { 
    Handsontable.TextCell.renderer.apply(this, arguments); 
    if (row in myindex) td.style.background = 'lightblue';} 
    }" 
) 

Antwort

2

Dies ist die effizienteste Antwort nicht sein kann, aber es funktioniert: Sie paste()/paste0() können Ihr r Objekt in das Javascript c hinzufügen ode, wie folgt:

myindex <- c(1, 3, 4) 

rhandsontable(data.frame(ID=1:5,var1=rnorm(5), var2=letters[1:5])) %>% 
    hot_cols(
    renderer = paste0(
     " 
     function(instance, td, row, col, prop, value, cellProperties) { 
     Handsontable.TextCell.renderer.apply(this, arguments); 
     var row_index = ", paste("[", paste(myindex, collapse = ","), "]"), "; 
     for (i = 0; i < row_index.length; i++) 
     if (row == row_index[i]) { 
      td.style.background = 'lightblue'; 
     } 
     } 
     " 
    ) 
) 
+0

Diese Lösung funktioniert auch in einer glänzenden App. Es gibt auch eine Alternative, da 'randsontable' nun einen Parameter akzeptiert, der über den' params' Parameter zugänglich ist. Weitere Informationen finden Sie in der Hilfe zu rsssontable unter "Benutzerdefinierter Renderer mit einem R-Parameter" und dem dort angegebenen Beispiel. Aber die obige Lösung funktioniert genauso gut! Vielen Dank! –

Verwandte Themen