我正在實現一個網格面板,其中最後四列可以編輯大部分行。問題是,我希望能夠禁用編輯,如果record.get('status')= 4已完成並且只有兩列應該可編輯,那麼假設第一個編輯。ExtJS 4 RowEditing根據記錄禁止在一列上編輯
有沒有辦法禁止顯示這些行的編輯?我可以使用CellEditing完成,但想繼續使用RowEditing插件。
問候, 克里斯蒂安
我正在實現一個網格面板,其中最後四列可以編輯大部分行。問題是,我希望能夠禁用編輯,如果record.get('status')= 4已完成並且只有兩列應該可編輯,那麼假設第一個編輯。ExtJS 4 RowEditing根據記錄禁止在一列上編輯
有沒有辦法禁止顯示這些行的編輯?我可以使用CellEditing完成,但想繼續使用RowEditing插件。
問候, 克里斯蒂安
使用beforeedit
事件:
grid.on('beforeedit', function(editor, e) {
if (e.colIdx === 0 && e.record.get('status') == 4)
return false;
});
UPDATE
上面的解決方案是不爲rowEditor工作。
但是,您可以在beforeedit
上禁用所需字段。要做到這一點,你應該可以訪問rowediting插件。指定pluginId到插件:
plugins: [
Ext.create('Ext.grid.plugin.RowEditing', {
clicksToEdit: 1,
pluginId: 'rowEditing'
})
],
現在只是禁用需要進行實地如果某些條件得到滿足:
grid.on('beforeedit', function(editor, e) {
if (e.record.get('status') === 4){
grid.getPlugin('rowEditing').editor.form.findField('fieldToDisable').disable();
}
else{
grid.getPlugin('rowEditing').editor.form.findField('fieldToDisable').enable();
});
這裏是demo(嘗試編輯第一行)。
編輯
如果上面的jsfiddle不工作,嘗試its updated version。
(基於前面的示例)的另一種方法是配置編輯器的beforeedit
聽衆:
listeners: {
beforeedit: function(editor, context) {
var form = editor.getEditor().form;
var field = form.findField('column_name');
var status = parseInt(context.record.data.status);
if(status === 4){field.disable();} else {field.enable();}
}
}
這是@Molecular Man answser – alexandre1985
@ alexandre1985的一個重複,它不是因爲聽者的定義完全不同;請在投票前瞭解「Ext.define」。 –
@ alexandre1985請首先學習閱讀/編寫和理解 - 以及編寫ExtJS腳本;現在我已經投票了你的答案......因爲它清楚地顯示了你對你所談論的事情有多少線索......而且我不是唯一一個有這種觀點的人:) –
由於@Molecular人的回答讓殘疾人士柱看時rowediting是編輯我想到了另外一個辦法還挺有趣看起來很完美。 所有你需要做的就是創建一個函數,這可能是例如:
function fieldFormat() {
if(isGuest) {
return null; //is not editable
} else {
//how you want the column's field config to be formated
var json = Ext.JSON.decode("{xtype: 'textfield',maxLength: 40}");
return json;
}
}
,並在網格中,你把這樣的事情:
var grid = Ext.create('Ext.grid.Panel', {
plugins: [grid_rowEditing],
store: store,
columns: [
{
text : 'Name',
dataIndex: 'name',
field : fieldFormat()
}]
});
當isGuest是真實的字段'名稱'將不可編輯。當它是錯誤的,它將是可編輯的
這是行得通的,你爲什麼要投票下? – alexandre1985
是的,這將適用於CellEditing。對於RowEditing,它只會觸發beforeedit每行一次,而不是每列。 – Asken
@Asken,你說得對。更新了我的答案。 –
輝煌!像魅力一樣工作。試圖抓住表單域,但我錯過了findField函數。謝謝! – Asken