ExtJS擴展:擴展grid之toolbar button禁用表達式


      在前一篇文章我們擴展了grid通過選中記錄數來禁用toolbar上的按鈕,有時候我們需要通過記錄中的數據來決定是否禁用按鈕,今天我們就來擴展它。

      照例,最新的代碼和例子都在github上:ExtJsExtend

      先看看使用代碼(這里只有部分代碼,可以結合前一篇文章來閱讀或者直接通過github獲取最新代碼):

 
                buttonDisable: { 
                    noSelection: ['Edit', 'Delete', 'Print'], 
                    moreSelections: ['Edit'], 
                    expressions: { 
                        Edit: '$phone == "555-222-1254"' 
                    } 
                },

     (這里重構了前一篇文章中的用法困惑,將noSelectionDisable、oneSelectionDisable、moreSelectionsDisable整合進buttonDisable中了)。

      expressions就是表達式,用item的name或itemId作為Key,表達式就是javascript的表達式,需要注意的是要在field的名稱前加$(因為最終要替換$,通過eval來運行表達式)。來看看效果:

image

嗯,這條記錄是可以編輯的。

 

image

這條記錄不能編輯,因為phone== “555-222-1254”。

 

看看這部分擴展的代碼:

 
            if (me.buttonDisable.expressions) { 
                var exps = me.buttonDisable.expressions; 
                for (var btn in exps) { 
                    var exp = exps[btn]; 
                    for(var i = 0, il = records.length;i<il;i++) { 
                        var data = records[i].data; 
                        exp = exp.replace(/\$/g, 'data.'); 
                        var disabled = eval(exp); 
                        if (disabled === true) { 
                            disables[btn] = true; 
                            break; 
                        } 
                    } 
                } 
            }

代碼也比較簡單,就是遍歷選中記錄,然后在數據上執行表達式,如果為true就禁用,只要有一條記錄的數據滿足,那么這個按鈕就將會被禁用。

還需注意,表達式禁用比選中記錄數禁用的優先級高。


免責聲明!

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



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