2010-10-25 14 views
23

estoy usando MarkupBuilder mano del maravilloso para construir una página HTML de varias fuentes de datos.primero y último elemento dentro de una maravillosa cada uno {} cierre

Una cosa 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 la primera o la último artículo.

¿Existe una buena forma Groovy-ified para hacer esto sin recurrir a algo manual para verificar los índices de artículo contra el tamaño de la lista usando algo como eachWithIndex{}?

Respuesta

43

Usted podría utilizar

if(it == myList.first()) { 
    // First element 
} 

if(it == myList.last()) { 
    // Last element 
} 
+0

buena propina, no sabía nada de esos métodos. – xlson

+0

Útil, gracias. Como antes, no había visto esos métodos antes ... – tomtheguvnor

+3

Solo recuerda que el primero() y el último() solo funcionan en la Lista, no en el Mapa o el Conjunto (según http://groovy.codehaus.org/groovy-jdk /) – sbglasius

1

si (it.after.value! = Null) {} ......

Obras para mapas

10

la respuesta dada por sbglasius puede generar resultados incorrectos, como cuando la lista contiene elementos redundantes, por lo que un elemento de la lista puede ser igual al último.

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 
    } 
} 
+0

Gracias por eachWithIndex :) es agradable – Elaine

Cuestiones relacionadas