2013-06-10 4 views
4

У меня есть панель сетки и кнопка.
, когда Я щелкнув по кнопке, он будет передавать данные через ajax и после того, как финишная сетка перезагрузится.
Я пытаюсь повторно выбранной строки (здесь я дать у пример первой строки), но в любом случае это не работаетКак перебрать строку после store.load()

Ext.Ajax.request({ 
    url: ..., 
    params: { 
     v: ...     
    }, 
    success: function(response){ 
     grid.store.load();            
     grid.getSelectionModel().select(0, true); // example first row 

    } 
}) 
+0

См. Также http://stackoverflow.com/q/9111084/539048 – GreenGiant

ответ

9

попробуйте выбрать строку в обратном вызове

grid.store.load({ 
    scope:this, 
    callback:function(records, operation, success){ 
    grid.getSelectionModel().select(0, true); 
    } 
}); 

или

grid.store.load(function(records, operation, success){ 
    grid.getSelectionModel().select(0, true); 
}); 
+0

спасибо, он хорошо работает – freestyle

0

При ответе, может быть, вы можете использовать поле для его дифференциации:

Сенча 4.0.7: store finde

store.find(fieldName, value); 

Другой способ, но я думаю, что это не работает после магазина нагрузки, это использование:

Сенча: getLastSelected

grid.getSelectionModel().getLastSelected() 
+0

спасибо, но он не работает для меня. @ Ответ MMT работает :) – freestyle

3

Вы можете сделать свой ряд вариантов сохраняются при перезагрузке магазина, применяя следующие переопределения:

Ext.override(Ext.view.View, { 
    preserveSelectionOnRefresh: true, 
    constructor: function() { 
     this.callOverridden(arguments); 
     if (this.preserveSelectionOnRefresh) { 
      this.mon(this.getStore(), { 
       beforeload: this.beforeStoreLoadPreserveSelectionRoutine, 
       scope: this 
      }); 
     } 
    }, 
    beforeStoreLoadPreserveSelectionRoutine: function() { 
     var sm = this.getSelectionModel(), 
      selection = sm.getSelection(), 
      i = 0, 
      l = selection.length, 
      savedSelection = []; 
     delete sm.savedSelection; 
     for (; i < l; i++) { 
      savedSelection.push(selection[i].getId()); 
     } 
     if (savedSelection.length) { 
      sm.savedSelection = savedSelection; 
     } 
    } 
}); 
Ext.override(Ext.selection.Model, { 
    refresh: function() { 
     // include selections saved across store reloads   
     if (this.savedSelection && this.savedSelection.length) { 
      var rs = [], 
       r, 
       j = 0, 
       l = this.savedSelection.length; 
      for (; j < l; j++) { 
       r = this.store.getById(this.savedSelection[j]); 
       if (r) { 
        rs.push(r); 
       } 
      } 
      if (rs.length) { 
       this.select(rs, false, true); 
      } 
     } 
     this.callOverridden(); 
     delete this.savedSelection; 
    } 
}); 

Что они делают, это просто сохранить то, что было выбрано до перезагрузки магазина, и обеспечить повторную выборку этих записей после обновления представления. Протестировано на Ext JS 4.1.2.

+0

На самом деле в Ext4 можно было просто сделать 'var savedRecords = selModel.getSelection()', а затем просто использовать 'selModel.select (savedRecords)' ... Но так как Ext 5 или 6 вам нужно повторно выберите все записи из магазина (как указано выше), прежде чем выбирать их. Таким образом, ваше решение более передовое. – Nux

2

... и если вы используете буферное хранилище и Ext JS 4.2+, вы можете использовать функцию scrollTo, которая выбирает и прокручивает вид на ваш выбор:

grid.store.load(function(records, operation, success){ 
    grid.view.bufferedRenderer.scrollTo(0, true); 
}); 
+0

спасибо, я пользуюсь 4.1+ :). как я могу сделать это в 4.1+? – freestyle

+0

4.2 scrollTo берет на себя ответственность за загрузку страниц, если они не находятся в PageMap магазина. Я думаю, что в 4.1 нет такой функции, поэтому вам придется загружать страницы самостоятельно. – Christoph

2

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

grid.store.load(function(records, operation, success) { 
    grid.getView().select(0); 
}); 
0

Вот плагин дублями заботиться о том, что для вас:

https://github.com/roberto-rodriguez/ExtJs_GridMultipageSelectionPlugin

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

enter image description here

Плагин предполагает, что есть столбец с dataIndex: «ID»

0

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

grid.store.load(function() { 
    var view = grid.getView(), 
     selModel = grid.getSelectionModel(), 
     lastSelected = selModel.getLastSelected(); 

    view.select(lastSelected); 
}); 

или лучше, слушатель для всех нагрузки сделано в магазине в будущем:

grid.store.on('load', function() { 
    var view = grid.getView(), 
     selModel = grid.getSelectionModel(), 
     lastSelected = selModel.getLastSelected(); 

    view.select(lastSelected); 
}); 

grid.store.load();