Detectar primero y último elemento dentro de una maravillosa cada uno {} cierre
-
26-09-2019 - |
Pregunta
Estoy utilizando MarkupBuilder mano del maravilloso para construir una página HTML de varias fuentes de datos.
Una cosa que estoy luchando para hacer muy bien es construir una tabla HTML y aplicar diferentes clases de estilo para la primera y última filas. Este es probablemente el mejor ilustrado con un ejemplo ...
table() {
thead() {
tr(){
th('class':'l name', 'name')
th('class':'type', 'type')
th('description')
}
}
tbody() {
// Add a row to the table for each item in myList
myList.each {
tr('class' : '????????') {
td('class':'l name', it.name)
td('class':'type', it.type)
td(it.description)
}
}
}
}
En la sección <tbody>
, me gustaría establecer la clase del elemento <tr>
a ser algo diferente en función de si el elemento actual de myList
es el primero o el último elemento.
¿Hay una buena manera de hacer esto sin tener que recurrir a algo manual para comprobar los índices de artículos en contra del tamaño de la lista usando algo como eachWithIndex{}
maravilloso ified?
Solución
Se puede usar
if(it == myList.first()) {
// First element
}
if(it == myList.last()) {
// Last element
}
Otros consejos
La respuesta proporcionada por sbglasius puede conducir a resultados incorrectos como cuando la lista contiene elementos redundantes por lo que un elemento desde el interior del listado es igual a la última.
No estoy seguro de si sbglasius podría utilizar en lugar de is()
==
sino una respuesta correcta podría ser:
myList.eachWithIndex{ elt, i ->
if(i == 0) {
// First element
}
if(i == myList.size()-1) {
// Last element
}
}
Si (it.after.value! = Null) { ...... }
Obras de mapas