ExtJS 4 RowEditing désactiver la modification sur une colonne basée sur le casier
j'implémente un panneau de grille avec les quatre dernières colonnes modifiables pour la plupart des lignes. Le problème est que j'aimerais pouvoir désactiver le montage sur, disons le premier si enregistrer.get ('status') = 4 qui est finalisé et seulement deux des colonnes devraient être modifiables.
Est-il possible de désactiver l'affichage de l'éditer pour ces lignes? Je peux le faire en utilisant CellEditing mais je veux continuer à utiliser le plugin RowEditing.
ce qui Concerne, Kristian
3 réponses
Utiliser beforeedit
événement:
grid.on('beforeedit', function(editor, e) {
if (e.colIdx === 0 && e.record.get('status') == 4)
return false;
});
UPDATE
La solution ci-dessus ne fonctionne pas pour rowEditor.
Cependant, vous pouvez désactiver le champ nécessaire sur beforeedit
. Pour ce faire, vous devriez être en mesure d'accéder au plugin rowediting. Attribuez pluginId au plugin:
plugins: [
Ext.create('Ext.grid.plugin.RowEditing', {
clicksToEdit: 1,
pluginId: 'rowEditing'
})
],
maintenant, il suffit de désactiver le champ neededed si certaines conditions sont remplies:
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();
});
Ici démo (essayez d'éditer en premier rangée.)
Modifier
Si le ci-dessus JSFiddle ne fonctionne pas, essayez sa version mise à jour.
(basé sur l'exemple précédent) une autre solution est de configurer l'éditeur beforeedit
port d'écoute:
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();}
}
}
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;
}
}
et dans la grille, vous mettez quelque chose comme ceci:
var grid = Ext.create('Ext.grid.Panel', {
plugins: [grid_rowEditing],
store: store,
columns: [
{
text : 'Name',
dataIndex: 'name',
field : fieldFormat()
}]
});
et si isGuest est vrai le champ ' Nom ' ne sera pas modifiable. Quand c'est faux, il sera modifiable