Оставьте выделение в списке - PullRequest
1 голос
/ 10 июля 2020

У меня есть два парня, которые меняют порядок в списке

кнопки и выбранный элемент

Но когда позиция изменяется, я теряю фокус на выборе

новый порядок

Мне нужно, чтобы при этом изменении выбор оставался на элементе.

Это код для кнопок.

{
    xtype: 'use-icon',
    clsIcone: 'x-mi mi-keyboard-arrow-up font-size-20 cursor-pointer',
    toolTipText: 'Subir etapa',
    reference: 'btnSubirEtapa',
    cbOnClick: 'onClickSubirEtapa'
}, {
    xtype: 'use-icon',
    clsIcone: 'x-mi mi-keyboard-arrow-down font-size-20 cursor-pointer',
    toolTipText: 'Descer etapa',
    reference: 'btnDescerEtapa',
    cbOnClick: 'onClickDescerEtapa'
}

и здесь контроллер

    onClickSubirEtapa: function() {
    var me = this,
        $vw = me.getView(),
        $grid = $vw.down('fichatecnica-sequenciaoperacional-operacoes-window-lista'),
        selection = $grid.getSelection();

    if($grid.getController().validarSelecao(selection, 1, 1)) {
        me.subirOperacao(selection[0]);
    }
},

subirOperacao:function(record) {
    var me = this,
        vwm = me.getViewModel(),
        modelFichaTecnica = vwm.get('FichaTecnica'),
        codigoFichaTecnica = vwm.get('CodigoFichaTecnica'),
        rep = me.getRepositorio();

    rep.subirOperacao(codigoFichaTecnica, vwm.get('CodigoEtapa'), record.data.Id, Use.Callback.padrao(function() {
        me.recuperarOperacoes(codigoFichaTecnica);
    }));
}, 

, если нужны дополнительные сведения, могу добавить.

Редактировать. Версия Ext: 6.5.3. Инструментарий Classi c.

1 Ответ

0 голосов
/ 10 июля 2020

Проблема в перезагрузке магазина. После заказа на стороне сервера в магазин загружаются новые данные, и сетка сбрасывает выбор. В этом случае вы должны сохранить выбранный идентификатор записи (я надеюсь, что вы используете идентификаторы записей на стороне сервера) и после загрузки хранилища повторно выберите строки по идентификаторам записей.

Что-то вроде следующего примера скрипта:

Ext.define('SampleGrid', {
    extend: 'Ext.grid.Panel',
    title: 'Simpsons',
    store: {
        fields: ['fieldOne', 'fieldTwo'],
        proxy: {
            type: 'ajax',
            url: 'data.json',
            reader: {
                type: 'json',
                rootProperty: 'root'
            }
        },
        autoLoad: true
    },
    dockedItems: [{
        xtype: 'toolbar',
        items: [{
            text: "Reload",
            handler: function () {
                var grid = this.up('grid'),
                    store = grid.getStore();
                store.load();
            }
        }]
    }],
    columns: [{
        text: 'Field One',
        dataIndex: 'fieldOne',
        flex: 1
    }, {
        text: 'Field Two',
        dataIndex: 'fieldTwo',
        flex: 1
    }],

    initComponent: function () {
        this.callParent();
        this.addRememberSelectionFeature();
    },

    addRememberSelectionFeature: function () {
        // Store record id on select
        this.on('select', function (grid, selectedRecord) {
            this.storedSelectedRecordId = selectedRecord.getId();
        }, this);

        // Select records after reload
        this.getStore().on('load', function (store) {
            var lastSelectedRecord = store.getById (this.storedSelectedRecordId);
            if (lastSelectedRecord) {
                this.getSelectionModel().select(this.storedSelectedRecords);
            }
        }, this);
    }
});

Ext.application({
    name: 'Fiddle',

    launch: function () {
        Ext.create('SampleGrid', {
            renderTo: Ext.getBody()
        });
    }
});

Данные с идентификаторами на стороне сервера (не создаются автоматически с помощью ext js):

{
    "root": [{
        "id": 0,
        "fieldOne": 1,
        "fieldTwo": 4
    }, {
        "id": 1,
        "fieldOne": 2,
        "fieldTwo": 3
    }, {
        "id": 2,
        "fieldOne": 3,
        "fieldTwo": 2
    }, {
        "id": 3,
        "fieldOne": 4,
        "fieldTwo": 1
    }]
}

Если вы используете модель множественного выбора, необходимо изменить код, просто сохраните идентификаторы выбранных записей в массиве.

...