[Ext.NET] 當沒有使用FormPanel時,要如何進行 validation

[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.ComponentMgrExt.ComponentExt.util.MixedCollectionExt.form.FormPanelExt.form.Field