J'implémente un panneau de grille avec les quatre dernières colonnes modifiables pour la plupart des lignes. Le problème est que je voudrais pouvoir désactiver l'édition sur, disons le premier si record.get ('status') = 4 qui est finalisé et seules deux des colonnes doivent être modifiables.
Existe-t-il un moyen de désactiver l'affichage de la modification pour ces lignes? Je peux le faire en utilisant CellEditing mais je veux continuer à utiliser le plugin RowEditing.
Cordialement, Kristian
Utilisez beforeedit
event:
grid.on('beforeedit', function(editor, e) {
if (e.colIdx === 0 && e.record.get('status') == 4)
return false;
});
METTRE À JOUR
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 pouvoir accéder au plugin rowediting. Attribuer pluginId à plugin:
plugins: [
Ext.create('Ext.grid.plugin.RowEditing', {
clicksToEdit: 1,
pluginId: 'rowEditing'
})
],
Désactivez simplement le champ nécessaire 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();
});
Voici demo (essayez d’éditer la première ligne).
Modifier
Si JSFiddle ci-dessus ne fonctionne pas, essayez sa version mise à jour .
(basé sur l'exemple précédent) une autre méthode consiste à configurer le programme d'écoute beforeedit
de l'éditeur:
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();}
}
}