[Ext.NET] 當沒有使用FormPanel時,要如何進行 validation
這個概念其實很簡單,就是把畫面上所有的form element找出來,在去檢查是不是Valid
以下範例的參數 obj 是指呼叫這個js funtion物件,用這個參數是為了支援 Validation Group
function YourValidate(obj) {
var targetGroup = (Ext.isEmpty(obj) || Ext.isEmpty(obj.validationGroup)) ? false : obj.validationGroup;
var inValidformElements = Ext.ComponentMgr.all.filterBy(
function (o, k) {
var isFormElement;
switch (o.getXType()) {
case "checkbox":
case "checkboxgroup":
case "combo":
case "compositefield":
case "datefield":
case "field":
case "fieldset":
case "hidden":
case "htmleditor":
case "numberfield":
case "radio":
case "radiogroup":
case "textarea":
case "textfield":
case "timefield":
case "trigger":
isFormElement = true; break;
default:
isFormElement = false;
}
return isFormElement;
}).filterBy(
function (o, k) {
if (o.isVisible()) {
if (!targetGroup) {
return (Ext.isEmpty(o.validationGroup) && !o.isValid());
}
else {
if (Ext.isEmpty(o.validationGroup)) {
return false;
}
else {
return (o.validationGroup === targetGroup) ? !o.isValid() : false;
}
}
}
else {
return false;
}
});
return !(inValidformElements.getCount() > 0)
}
假設你有用 FormPanel 的話,它底層是把所有的form element 存在一個collection裡面,
驗證的時候會去看一遍裡面所有物件,因此效率一定會比較好。
參考:
Ext.ComponentMgr、Ext.Component、Ext.util.MixedCollection、Ext.form.FormPanel、Ext.form.Field