在前一篇文章我們擴展了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來運行表達式)。來看看效果:
嗯,這條記錄是可以編輯的。
這條記錄不能編輯,因為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就禁用,只要有一條記錄的數據滿足,那么這個按鈕就將會被禁用。
還需注意,表達式禁用比選中記錄數禁用的優先級高。