2011-10-06 1 views
20

ほとんどの行に対して4つの最後の列を編集可能なグリッドパネルを実装しています。問題は、編集を無効にできるようにしたいということです。最初にrecord.get( 'status')= 4と指定し、2つの列だけを編集可能にするとしましょう。ExtJS 4 RowEditingは、レコードに基づいて1つの列の編集を無効にします。

これらの行の編集を無効にする方法はありますか?私はCellEditingを使用してそれを行うことができますが、RowEditingプラグインを使い続けたいと思います。

よろしく、 クリスチャン

答えて

37

使用beforeeditイベント:上記溶液はrowEditorのために働いていません

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

UPDATE。
beforeeditで必要なフィールドを無効にすることができます。これを行うには、行編集プラグインにアクセスできる必要があります。プラグインするのPluginIDを割り当てます。

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

いくつかの条件が満たされていれば今だけの必要なフィールドを無効にします。ここでは

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

は、(最初​​の行を編集しよう)demoです。

編集

JSFiddle上記動作しない場合は、its updated versionを試してみてください。

+1

はい、それはCellEditingで動作します。 RowEditingでは、列ごとではなく、行ごとに1回beforeeditがトリガーされます。 – Asken

+1

@Asken、あなたは正しいです。私の答えを更新しました。 –

+0

華麗!魅力のように働いた。フォームフィールドを保持しようとしましたが、findField関数が見つかりませんでした。ありがとう! – Asken

1

(前の例に基づいて)別の方法は、エディタのbeforeeditリスナーを設定することです:

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

これは、@分子マンアンサーサ – alexandre1985

+0

@ alexandre1985の反論です。リスナーが全体的に異なって定義されているためではありません。ダウン投票する前に 'Ext.define'について学んでください。 –

+0

@ alexandre1985まず、ExtJSの読み書きと理解、そしてExtJSのスクリプティングを学んでください。今私はあなたの答えを投票しました...あなたが話していることのほんの少しの手がかりを明らかに示しているので、私はこの意見を持った唯一の人ではありません:) –

-2

roweditingは、私は別の方法を考え編集しているとき@Molecularマンの答えは無効列の外観はちょっとおかしいなりますので、完璧に見える。 あなたがしなければならない例えばかもしれ関数を作成することです:

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

とグリッドで、あなたはこのようなものを置く:

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

とするときisGuestが真でありますフィールド 'name'は編集できません。それが偽であれば、編集可能になります

+0

これは、ダウン? – alexandre1985

関連する問題