2012-02-07 3 views
0

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

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

ответ

1

Вы можете использовать .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]); 
} 
+0

focusRow требует номер строки, newRecordsToSelect [0] содержит запись, поэтому этот точный фрагмент может не работать. –

+1

'focusRow()' также принимает объекты Ext.data.Model не только числа, [здесь это находится в документах] (http: //docs.sencha.com/ext-js/4-0/#!/api/Ext.view.Table-method-focusRow). newRecordsToSelect [0] оказывается объектом 'Ext.data.Model'. – Geronimo

+0

Вы правы (+1). я имел в виду документы 3.4.x, где он не –

1

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

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

Необходимо this.
т.е. в выборе обновления, после выбора, сделайте это -


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

+0

Спасибо! Это сработало, а не метод 'focusRow', вызывающий ... – Andron

+0

Вы говорите, что' focusRow' не делает то, что он должен делать? Я только что разместил [этот вопрос] (http://stackoverflow.com/questions/22335335/after-loading-store-select-and-show-specific-row-in-grid-works-in-chrome-not-i) в котором 'focusRow', похоже, не работает в IE и FireFox (но он работает в Chrome). Я попробую завтра, если 'scrollIntoView' будет работать лучше в моей ситуации. – comecme

Смежные вопросы