我刚开始学习Go来自JS/TS。我想验证一个关于失焦的条目。
我让它像这样工作:
type dateEntry struct {
widget.Entry
}
func NewDateEntry() *dateEntry {
entry := &dateEntry{}
entry.ExtendBaseWidget(entry)
return entry
}
func (e *dateEntry) FocusLost() {
println("Focus lost")
e.Validate()
}
func main() {
dateInput := NewDateEntry()
dateInput.SetPlaceHolder("DD/MM/YYYY")
dateInput.Validator = func(s string) (err error) {
reDate := regexp.MustCompile("(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\d\d)")
if s == "" {
return fmt.Errorf("date required")
} else if !reDate.MatchString(s) {
return fmt.Errorf("date invalid")
}
return nil
}
w.SetContent(dateInput)
w.ShowAndRun()
}
似乎有很多代码只是为了在失去焦点时触发函数。有更简单的方法吗?
现在在输入的底部的蓝线不再显示当焦点获得,我怎么能保持风格时,焦点获得而处理焦点丢失事件?
要触发这个函数,您可以扩展Entry
并覆盖OnFocusLost
(因为Entry已经处理了这个)。然而,对于验证,最好使用Validator api,因为它可以自动为用户提供视觉反馈。
我不确定你的例子是很多代码的说法-每一行似乎都传达了意义。