2011-10-06 9 views
20

Sto implementando un pannello della griglia con le ultime quattro colonne modificabili per la maggior parte delle righe. Il problema è che mi piacerebbe poter disabilitare l'editing, diciamo il primo se record.get ('status') = 4 che è finalizzato e solo due delle colonne dovrebbero essere modificabili.ExtJS 4 RowEditing disable edit su una colonna in base al record

C'è un modo per disabilitare la visualizzazione delle modifiche per quelle righe? Posso farlo usando CellEditing ma voglio continuare a usare il plugin RowEditing.

saluti, Kristian

risposta

37

Uso beforeedit evento:

grid.on('beforeedit', function(editor, e) { 
    if (e.colIdx === 0 && e.record.get('status') == 4) 
    return false; 
}); 

UPDATE
La soluzione di cui sopra non funziona per rowEditor.
Tuttavia è possibile rendere obbligatorio il campo necessario su beforeedit. Per farlo dovresti essere in grado di accedere al plugin di rowinging. Assegnare PluginID a plugin:

plugins: [ 
    Ext.create('Ext.grid.plugin.RowEditing', { 
     clicksToEdit: 1, 
     pluginId: 'rowEditing' 
    }) 
], 

Ora basta disattivare campo necessaria se sono soddisfatte alcune condizioni:

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

Ecco demo (provate a modificare prima fila).

Modifica

Se quanto sopra JSFiddle non funziona, provare its updated version.

+1

Sì, funzionerebbe per il CellEditing. Per RowEditing verrà attivato solo prima una volta per riga e non per colonna. – Asken

+1

@ Asken, hai ragione. Aggiornato la mia risposta. –

+0

Brillante! Ha funzionato come un fascino. Ho provato a mantenere il campo modulo ma ho perso la funzione findField. Grazie! – Asken

1

(basato sul precedente esempio) un modo alternativo è quello di configurare beforeedit ascoltatore del redattore:

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

questa è una ripetizione di @Molecular Man risponditore – alexandre1985

+0

@ alexandre1985 non è perché l'ascoltatore è definito completamente diverso; per favore informati su 'Ext.define' prima del down-voting. –

+0

@ alexandre1985 si prega di imparare a leggere/scrivere e comprendere - oltre allo scripting ExtJS, in primo luogo; ORA ho votato la tua risposta ... perché mostra chiaramente quanto poco hai di ciò di cui stai parlando ... e io non sono l'unico con questa opinione :) –

-2

Dal @Molecular uomo risposta rende la colonna disabile sembra abbastanza divertente quando rowediting sta modificando ho pensato a un altro modo sembra perfetto Tutto quello che dovete fare è creare una funzione, che può essere per esempio:

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; 
    } 
} 

e nella griglia, si mette qualcosa di simile:

var grid = Ext.create('Ext.grid.Panel', { 
    plugins: [grid_rowEditing], 
    store: store, 
    columns: [ 
    { 
     text  : 'Name', 
     dataIndex: 'name', 
     field : fieldFormat() 
    }] 
}); 

e quando isGuest vale la il campo 'nome' non sarà modificabile. Quando è falso, sarà modificabile

+0

funziona, perché stai votando giù? – alexandre1985

Problemi correlati