2011-10-06 31 views
20

我正在實現一個網格面板,其中最後四列可以編輯大部分行。問題是,我希望能夠禁用編輯,如果record.get('status')= 4已完成並且只有兩列應該可編輯,那麼假設第一個編輯。ExtJS 4 RowEditing根據記錄禁止在一列上編輯

有沒有辦法禁止顯示這些行的編輯?我可以使用CellEditing完成,但想繼續使用RowEditing插件。

問候, 克里斯蒂安

回答

37

使用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

+1

是的,這將適用於CellEditing。對於RowEditing,它只會觸發beforeedit每行一次,而不是每列。 – Asken

+1

@Asken,你說得對。更新了我的答案。 –

+0

輝煌!像魅力一樣工作。試圖抓住表單域,但我錯過了findField函數。謝謝! – Asken

1

(基於前面的示例)的另一種方法是配置編輯器的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();} 
    } 
} 
+0

這是@Molecular Man answser – alexandre1985

+0

@ alexandre1985的一個重複,它不是因爲聽者的定義完全不同;請在投票前瞭解「Ext.define」。 –

+0

@ alexandre1985請首先學習閱讀/編寫和理解 - 以及編寫ExtJS腳本;現在我已經投票了你的答案......因爲它清楚地顯示了你對你所談論的事情有多少線索......而且我不是唯一一個有這種觀點的人:) –

-2

由於@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是真實的字段'名稱'將不可編輯。當它是錯誤的,它將是可編輯的

+0

這是行得通的,你爲什麼要投票下? – alexandre1985