Extjs4 關於設置form中所有子控件為readOnly屬性的解決方案


之前在網上找了一堆,但那些確實沒法用,后來考慮了一下,發現主要是網上提供的假設form中只有一層控件,沒有考慮到布局稍微復雜的form情形,此處采用遞歸的形式實現對form中所有控件(grid及button必須排除,否則會報錯,如果發現還有其它控件也會報錯,請反饋給我,好完善此代碼)

代碼很簡單,setFormReadOnly需要兩個參數,一個為form,一個為bool型變量,標明是需要給form整體加上readOnly屬性或是去除此屬性.

由於setReadOnly只是將控件置為只讀或非只讀,不能改變控件顏色,達不到讓用戶一眼看出是否為只讀的效果,所以在此用setFieldStyle使得設置為只讀的控件置灰.

setFormReadOnly為程序入口,里面有一個內嵌函數SetitemsReadOnly,此函數為遞歸函數,只要發現其本身屬性items不為空,則會遞歸調用自身,通過這樣的方式實現所有子控件都設置為readonly.

另外,程序中有一個stateId屬性判斷,此判斷用於在將readOnly的控件恢復正常時作一個過濾,凡是其stateId為readOnly的,一律略過,保持其readOnly屬性,不進行恢復

setFormReadOnly = function(form, readOnly) {
    setItemsReadOnly = function(items, readOnly) {
        items.each(function(item) {
                    var childitems = item.items;
                    if (!Ext.isEmpty(childitems, false)) {
                        setItemsReadOnly(childitems, readOnly);
                    } else {
                        if (item.xtype != "button" && (item.xtype != "gridview")) {
                            if(!Ext.isEmpty(item.stateId) && (item.stateId == "readOnly")){
                                return ;
                            }
                            item.setReadOnly(readOnly);
                            if (readOnly) {
                                item.setFieldStyle("background:#E6E6E6");
                            } else {
                                item.setFieldStyle("background:#FFFFFF");
                            }
                        }
                    }
                });
    }
    setItemsReadOnly(form.items, readOnly);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM