我制作了这个示例,以说明我要实现的目标http://tinyurl.com/y6y9xxt4。在文本框中键入内容,然后单击其外部的任何位置以激活绑定。
我有一个类demo.Communicator
,该类具有名为url
的属性。该属性已在第7行的validate: qx.util.Validate.url(),
中进行了验证
qx.Class.define("demo.Communicator",{
extend: qx.core.Object,
properties: {
url: {
check: "String",
validate: qx.util.Validate.url(),
event: "changeUrl",
init: null
}
},
members:{}
});
在第24行中,我将changeValue
的{{1}}事件与qx.ui.form.TextField
对象的属性url
绑定在一起。
demo.Communicator
如果textField.bind("changeValue", communicator, "url", {
onUpdate: function() {
textField.setValid(true);
},
onSetFail: function(e) {
textField.setValid(false);
textField.setInvalidMessage(e.toString());
}
});
属性的验证器验证了来自TextBox的值,它将更新该属性,并且url
回调将onUpdate
设置为textField
。如果验证器未通过验证,则该属性不会更新,并且valid
回调会将onSetFail
设置为无效。
是否有任何方法可以在不使用这些回调的情况下将验证状态从属性绑定到textField
?如果该属性未通过验证,则textField
必须自动设置为无效;如果该属性通过验证,则textField
应该变回有效。
我知道我也可以将textField
附加到qx.util.Validate.url()
上。不幸的是,这会引入第二个事实来源,而且看起来不太好。