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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top