4

私はグリッドを持っています:

Ext.create('Ext.grid.Panel', {
    id: 'grid',
    store: this.store,
    columns: [{
        dataIndex: 'a'
    },{
        dataIndex: 'b'
    },{
        dataIndex: 'c'
    }],
    selModel: {
        selType: 'cellmodel'
    },
    plugins: [cellEditing]
})

cellEditting を使用するもの:

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
    clicksToEdit: 1,
    listeners: {
        beforeedit: function(obj) {
                // Something goes here?
        }   
    }
});

現在、グリッドに「行を追加」するボタンがあるため、レコードは新しいものでも古いものでもかまいません。

  • ストア/パネルに新しい行が追加された場合、列が必要bで、c編集可能になります。
  • ユーザーが、パネルの作成時にデータベースから単にロードされた既存の行を編集しようとしている場合、c編集可能にする必要があるのは列だけです。

リスナーに何かを追加する必要があるとbeforeedit思いますが、ExtJS と JavaScript は一般的に初めてなので、条件を説明する方法がわかりません。

4

1 に答える 1

5

あなたは間違いなく正しい軌道に乗っています。「beforeedit」イベントを使用すると、false を返すことで編集操作を防ぐことができます。ドキュメントを確認すると、セルに関するすべての必要な情報を提供するオブジェクトを受け取ることがわかります: http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid .plugin.CellEditing-event-beforeedit

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
    clicksToEdit: 1,
    listeners: {
        beforeedit: function(editor, event, opts) {
            if (!event.record.phantom && event.column.dataIndex == 'columnC') {
                return false;
            }
        }   
    }
});

ファントムは、レコードが新しく作成された (まだサーバーに同期されていない) か、最初にストア内の他のすべてのレコードと共に読み込まれたかを知るために維持されるレコード プロパティです。

于 2013-02-25T23:36:54.317 に答える