Pergunta

Estou usando o Handy MarkupBuilder da Groovy para criar uma página HTML a partir de vários dados de origem.

Uma coisa que estou lutando para fazer bem é construir uma tabela HTML e aplicar diferentes classes de estilo nas primeiras e nas últimas linhas. Provavelmente isso é melhor ilustrado com um exemplo ...

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)
      }
    }
  }   
}

No <tbody> seção, eu gostaria de definir a classe do <tr> elemento para ser algo diferente, dependendo se o item atual em myList é o primeiro ou o último item.

Existe uma boa maneira de fazer isso sem recorrer a algo manual para verificar os índices de itens em relação ao tamanho da lista usando algo como eachWithIndex{}?

Foi útil?

Solução

Você poderia usar

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

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

Outras dicas

A resposta fornecida pelo sbglasius pode levar a um resultado incorreto, como quando a lista contém elementos redundantes, para que um elemento de dentro da lista possa ser igual ao último.

Não tenho certeza se Sbglasius poderia usar is() ao invés de == Mas uma resposta correta pode ser:

myList.eachWithIndex{ elt, i ->
  if(i == 0) {
   // First element
  }

  if(i ==  myList.size()-1) {
   // Last element
  }
}

if (it.after.value! = null) {......}

Funciona para mapas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top