1

やあ、

アイテムが1つしかないグリッドと、基になるレコードのset-methodでこのエントリを更新するボタンを使用した非常に基本的な例があります。

問題は、ボタンを押してレコードが更新されたときにアイテムが選択された場合、選択が削除され、それ以降は選択できなくなることです。

実例: http: //jsfiddle.net/fu2Xq/2/

Ext.onReady(function() {
    var personsGrid = Ext.create('Ext.grid.Panel', {
        width: 150,
        height: 100,
        renderTo: Ext.getBody(),

        store: Ext.create('Ext.data.Store', {
            fields: [ 'name' ],
            data: [{ name: 'Stephen' }]
        }),

        columns: [{ text: 'Name', dataIndex: 'name', flex: 1 }],
    });

    var txtField = Ext.create('Ext.form.field.Text', {
        fieldLabel: 'New name',
        labelWidth: 70,
        width: 150,
        value: 'Alex',
        renderTo: Ext.getBody()
    });

    Ext.create('Ext.button.Button', {
        text: 'Rename person',
        width: 150,
        renderTo: Ext.getBody(),
        handler: function() {
            var rec = personsGrid.getStore().getAt(0);

            rec.set('name', txtField.getValue());
        }
    });
});

名前列を並べ替えた後、選択範囲が再び表示されるため、私にはバグのように思えます...

これについてコメントをいただければ幸いです。

ありがとう


編集:いくつかのコードを再編成しました...

4

2 に答える 2

1

これは ExtJS 4.1.1 のバグで、4.1.3 で解決されたようで、レコードを更新した後にグリッドのビューの refresh-method を呼び出すことで回避できます。

http://jsfiddle.net/fu2Xq/7/

handler: function() {
    var rec = personsGrid.getStore().getAt(0);

    rec.set('name', txtField.getValue());  
    personsGrid.getView().refresh();
}

Sencha フォーラムからこの回答を得ました: http://www.sencha.com/forum/showthread.php?253287-Item-in-grid-is-deselected-after-record-has-been-modified-with-set -method&p=928197&viewfull=1#post928197

于 2013-01-11T07:55:49.927 に答える
0

列ヘッダーのイベントで、グリッド ビューからの古い選択が記憶され、並べ替えられたビューをレンダリングした後、これらheaderclickのレコードが再び選択されます。

の場合 rec.set()、 の代わりにdatachanged、 の「更新」イベントが発生Ext.data.storeします。headerclickただし、「更新」イベントと同じように、古いレコードの選択に関連する実装はありません。

したがって、 after でレコードの選択を実装する必要がありますrec.set()

同様の問題についての議論があります

于 2013-01-10T11:37:59.647 に答える