UiKanbanSpecifier buildTodoKanban() {
new UiKanbanSpecifier().ui { (1)
column 'To Do', Style.ALIGN_CENTER, { (2)
custom "Custom header html code"
}, Gantt2Controller.&changeTodoProgression as MethodClosure, [newProgression: 0], {
custom "Custom html code" (3)
todos.forEach { Todo todo ->
card todo, Gantt2Controller.&showTodo as MethodClosure, todo.id, { (4)
cardField todo.what_ (5)
cardFieldRaw "Custom html code" (6)
cardAction ActionIcon.SHOW * IconStyle.SCALE_DOWN, Gantt2Controller.&doSomething as MethodClosure, todo.id (7)
}
}
}
}
}
Table of Contents
-
Renderizado en HTML
-
Renderizado en Mails
-
Renderizado en PDF
-
Renderizado en CSV

Ejemplo de código
Ejemplo de código Kanban 1
Acción al soltar (Drop)
@Transactional
def changeTodoProgression(Integer newProgression) {
Todo todo = Todo.get(params.long('cardId')) (10)
todo.progression = newProgression
render status: 200
}
Registro de menú contextual en un servicio
@PostConstruct
void init() {
TaackUiService.registerContextualMenuClosure(Todo, new UiMenuSpecifier().ui { Long id -> (8)
menu 'Show Gantt', Gantt2Controller.&showGanttByTodo as MethodClosure, id (9)
})
}
| 1 | Crear el especificador de kanban |
| 2 | Construir una columna kanban con su etiqueta, estilo y un closure de encabezado opcional (solo custom); se puede pasar una acción y parámetros que se llamarán al hacer Drag+Drop en la columna |
| 3 | Se puede añadir código HTML personalizado para el cuerpo de la columna |
| 4 | Construir tarjetas en la columna; se puede pasar una acción y parámetros para MouseDoubleClic sobre la tarjeta |
| 5 | Construir una línea con un campo en la tarjeta; observe el guion bajo al final del nombre del campo |
| 6 | Código HTML personalizado, renderizado tal cual. cardField con un String se sanea (solo se conservan el formato básico y los enlaces); use cardFieldRaw para HTML generado por la aplicación, nunca para datos introducidos por los usuarios |
| 7 | Se puede añadir un icono con una acción asociada al clic |
| 8 | Registrar el menú contextual con MouseRight para la tarjeta |
| 9 | Añadir un elemento de menú vinculado a una acción |
| 10 | El identificador de la tarjeta soltada se transmite a través del parámetro cardId, junto con los parámetros de la columna |
Para mostrar el Kanban en un bloque, utilice kanban o kanbanFilter para asociar un filtro:
taackUiService.show(new UiBlockSpecifier().ui {
kanbanFilter buildTodoFilter(), buildTodoKanban()
}, buildMenu())
Jerarquía de símbolos DSL
Figure 1. Diagrama de jerarquía de símbolos para Kanban DSL