web-dev-qa-db-fra.com

ExtJS 4 RowEditing désactive l'édition sur une colonne en fonction de l'enregistrement

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

21
Asken

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 .

38
Molecular Man

(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();}
    }
}
1
Martin Zeitler