сосредоточиться на строке в extjs - PullRequest
0 голосов
/ 07 февраля 2012

благодаря помощи некоторых из вас у меня есть это:

Ext.define('PersistantSelectionGridPanel', {
    extend: 'Ext.grid.Panel',
    selectedRecords: [],
    initComponent: function () {
        this.callParent(arguments);

        this.getStore().on('beforeload', this.rememberSelection, this);
        this.getView().on('refresh', this.refreshSelection, this);
    },
    rememberSelection: function (selModel, selectedRecords) {
        this.selectedRecords = this.getSelectionModel().getSelection();
    },
    refreshSelection: function () {
        if (0 >= this.selectedRecords.length) {
            return;
        }
        var newRecordsToSelect = [];
        for (var i = 0; i < this.selectedRecords.length; i++) {
            record = this.getStore().getById(this.selectedRecords[i].getId());
            if (!Ext.isEmpty(record)) {
                newRecordsToSelect.push(record);
            }
        }
        this.getSelectionModel().select(newRecordsToSelect);
    }
});

var grid = Ext.create('PersistantSelectionGridPanel', {

    //autoscroll: true,
    region: 'center',
    autoHeight: true,
    store:  ND.commList,
    stateful: true,
    loadMask: false,
    multiSelect: true,
    //forceFit: true,
    layout: 'fit',
    stateId: 'stateGrid',
    viewConfig: {
        stripeRows: true        
    },
    columns: [
        {
            text: 'Vehicle',
            width: 60,
            flex: 0,
            sortable: true,
            dataIndex: 'designationId'
        },
        // more code
    ]
    // more code
});

Когда строка выбрана, она остается выбранной после обновления. Теперь список длинный, и вы можете прокручивать список. После обновления выбрана только правильная строка, мне все еще нужно перейти к этой записи. Как я могу сосредоточиться на этом ряду после обновления?

Toby

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Вы можете использовать .focusRow(). Примерно так в вашем методе refreshSelection:

refreshSelection: function () {
    if (0 >= this.selectedRecords.length) {
        return;
    }
    var newRecordsToSelect = [];
    for (var i = 0; i < this.selectedRecords.length; i++) {
        record = this.getStore().getById(this.selectedRecords[i].getId());
        if (!Ext.isEmpty(record)) {
            newRecordsToSelect.push(record);
        }
    }
    this.getSelectionModel().select(newRecordsToSelect);
    this.getView().focusRow(newRecordsToSelect[0]);
}
1 голос
/ 07 февраля 2012

Очевидно, что вы не сможете прокрутить несколько записей в поле зрения, если они все не вписываются в представление, но допустим, что вы хотите прокрутить конкретную выбранную запись (сначала выбранную / последнюю выбранную) в представление.

Допустим, вы смотрите на свой newRecordsToSelect и выбираете один идентификатор записи, на который хотите автоматически прокрутить. Позволяет назвать этот идентификатор 'id of selected record to scroll to'

Вам нужно это .
т.е. при выборе обновления после выбора сделайте это -


var idx = this.getStore().indexOfId('id of selected record to scroll to');
var rowEl = this.getView().getRow(idx);
rowEl.scrollIntoView(this.getGridEl(), false);

...