Я бы хотел, чтобы tornadofx украсил валидацию, которую я добавил методом model.addValidator()
сразу после загрузки фрагмента.Я использую model.validate(decorateErrors = true)
Кажется, это работает с валидаторами, которые были добавлены с расширением validator
, но не с теми, которые добавлены с использованием model.addValidator()
. Я предоставил пример коданиже.В этом примере валидатор в текстовом поле работает должным образом, а валидатор на кнопке - нет.
Вот после нажатия кнопкидважды:
Как видно из фрагмента, на тестовой кнопке нет красного треугольника.Однако, если нажать кнопку теста, валидатор начнет работать правильно.
Вот пример кода:
class ExampleDomain {
private val testBooleanProperty = SimpleBooleanProperty(false)
fun testBooleanProperty() = testBooleanProperty
var testBoolean by testBooleanProperty
private val testStringProperty = SimpleStringProperty("")
fun testStringProperty() = testStringProperty
var testString by testStringProperty
}
class ExampleModel : ItemViewModel<ExampleDomain>(ExampleDomain()) {
val testBooleanProperty = bind(ExampleDomain::testBooleanProperty)
val testStringProperty = bind(ExampleDomain::testStringProperty)
}
class ExampleFragment : Fragment() {
val model by inject<ExampleModel>()
val validatedButton = button("test") {
action {
model.testBooleanProperty.value = !model.testBooleanProperty.value
}
}
override val root = vbox {
padding = Insets(10.0, 10.0, 10.0, 10.0)
spacing = 5.0
textfield(model.testStringProperty) {
validator {
println(it)
when (!model.testStringProperty.value.isNullOrEmpty()) {
true -> success()
false -> error()
}
}
}
children += validatedButton
}
init {
model.addValidator(validatedButton, model.testBooleanProperty) {
when (model.testBooleanProperty.value == true) {
true -> success()
else -> error()
}
}
model.validate(decorateErrors = true)
}
}