2012-05-02 3 views
2

Я искал его в течение столь длительного времени, и (с моей собственной точки зрения) это основное поведение, которое должно было быть сделано долго время: вы сортируете сетку по столбцу, скажем, «», вы изменяете запись, имя «AAA» становится «ZZZ», оно отправляется на сервер, сервер отвечает «ok» на «ZZZ», поэтому значение обновляется, но остается там же, то есть порядок сортировки не обновляется.ExtJS: datagrid: повторное применение сортировки/обновления после загрузки

Есть ли способ сделать это автоматически? Какое событие, какой код? Как?

ответ

0

Я спросил у Sencha's forum, и впервые в истории у меня есть ответ там раньше в stackoverflow. Таким образом, чтобы разделить ответ, вот мой код, который работает:

Ext.define('Ext.data.StoreHandleErrors', { 
    extend: 'Ext.data.Store', 
    alias: 'data.storehandleerrors', 

    constructor: function(config) { 
     this.callParent([config]); 

     this.on(
      'write', 
      function(me, opts) { 
       this.sort(); 
      }, 
      this 
     ); 
    } 
}); 

Объяснение: Я перекрывая конструктор так, что каждый раз, когда «запись» событие вызывается, каждый раз, когда запись отправляется на сервер, это повторное сортирование магазина, чтобы мы всегда были уверены, что он правильно обновлен. Это общий метод, который может быть «слишком большим» (нет необходимости повторно сортировать за каждый), но (1) он работает для все магазины (2) нет необходимости делать собственные жестко закодированные материалы как предложил Абдель (хотя ответ Абделя может быть более подходящим, чтобы сделать его только один раз в определенной части кода).

+0

На самом деле я не могу понять ваш код. Было бы здорово, если бы вы добавили какое-то объяснение к вашему. – Praveen

3

Вы можете вызвать метод store явно, как только вы получите «ok» с сервера. что-то вроде:

myStore.sort("name","ASC"); 

Или, если у вас есть коллекция сортировки столбцов можно сделать использование sorters собственности доступны в магазине. Нравится:

myStore.sort(myStore.sorters); // this uses the existing sorting rules applied to the store 

Надеюсь, это поможет.

+0

+1 для меня 'myStore.sort (« имя »,« ASC »);' ваше первое решение работает безупречно. тогда как второй - нет. Я думаю, что у вас во дворе есть ошибка. Поскольку я новичок в ext.js, я не смог понять это. Я попробую, и я найду его, я дам вам знать. В любом случае, спасибо. – Praveen

+2

@Praveen Для второго решения для работы вам нужно определить сортировщики в хранилище следующим образом: 'sorters: [{property: 'name', direction: 'ASC'}]' – stambikk

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