设置
我有一个(相当标准的)表单,允许用户通过输入用户名和密码来创建帐户。当#username
字段失去焦点时,将查询数据库以查看提供的用户名是否可用。
问题
onblur
一切都按预期工作,但是从触发事件#username
到数据库返回值,用户界面被阻止。如何以异步和非阻塞方式检查数据库?
这是我的代码(我已经从示例 Opa 项目中提取了大部分代码):
类型
@abstract type User.ref = string
type User.t =
{ username : string
; passwd : string
}
type User.map('a) = ordered_map(User.ref, 'a, String.order)
数据库
db /user : User.map(User.t)
形式
<form>
<input id=#username type="text" onblur={_ -> username_available() } placeholder="username" />
<input id=#password type="password" placeholder="password" />
</form>
行动
username_available() : void =
user = Dom.get_value(#username)
match (get_user(user)) with
| { none } -> Log.notice("username available:", "YES")
| { some = _ } -> Log.notice("username available:", "NO")
get_user(username : string) : option(User.t) =
match ?/user[username] with
| { none } -> Option.none
| { ~some } -> Option.some(some)
谢谢你的帮助。