Extending the DSL
Le DSL Kotlin est extensible, permettant l'ajout de fonctions DSL pour des composants personnalisés ou des bibliothèques tierces. Vous pouvez créer des composants composites qui utilisent le DSL en interne.
Ajouter des composants au DSL
Pour rendre un composant disponible dans le DSL, créez une fonction d'extension sur HasComponents qui utilise la fonction d'assistance init.
Fonction DSL de base
Voici le modèle pour un composant simple. Cet exemple suppose que vous avez un composant Badge personnalisé :
import com.webforj.concern.HasComponents
import com.webforj.kotlin.dsl.WebforjDsl
import com.webforj.kotlin.dsl.init
import com.example.component.Badge
fun @WebforjDsl HasComponents.badge(
block: @WebforjDsl Badge.() -> Unit = {}
): Badge {
return init(Badge(), block)
}
La fonction init fait trois choses :
- Ajoute le composant au conteneur parent
- Exécute le bloc de configuration
- Retourne le composant configuré
Vous pouvez maintenant utiliser le composant dans le code DSL :
div {
badge {
text = "Nouveau"
variant = Badge.Variant.PRIMARY
}
}
Ajouter des paramètres
La plupart des fonctions DSL acceptent des paramètres communs avant le bloc de configuration :
fun @WebforjDsl HasComponents.badge(
text: String? = null,
variant: Badge.Variant? = null,
block: @WebforjDsl Badge.() -> Unit = {}
): Badge {
val badge = Badge()
text?.let { badge.text = it }
variant?.let { badge.variant = it }
return init(badge, block)
}
L'utilisation devient plus concise :
div {
badge("Nouveau", Badge.Variant.PRIMARY)
badge("Vente") {
styles["font-size"] = "12px"
}
}