我想强迫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)
}
}