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

21
demandé sur Asken 2011-10-06 23:21:38

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.

38
répondu Molecular Man 2015-12-01 12:24:12

(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();}
    }
}
1
répondu Martin Zeitler 2015-08-07 02:26:12
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

-2
répondu alexandre1985 2016-05-05 18:35:47