ExtJS: Ext.grid.Panel: как сохранить порядок сортировки после store.sync ()? - PullRequest
4 голосов
/ 18 сентября 2011

У меня есть хорошо работающая Ext.grid.Panel, с заголовками столбцов вы можете нажать для «автоматической» сортировкиВ магазине есть "autoSync: true".У меня есть кнопка «new», когда пользователь нажимает на нее, она создает пустую запись без свойства id:

onAddClick: function(){
    this.down('#new').setDisabled(true);
    var rec = new GroupeSynergies.data.Partenaire({
        /* Valeurs par défaut des colonnes */
        description: 'Nouveau partenaire'
    });
    this.store.insert(0, rec);
},

Я вставляю запись в позицию # 0,потому что я знаю, что это будет автоматически синхронизироваться (и это то, что происходит на самом деле).Проблема в том, что: если вы щелкнете по столбцу «id», он будет отсортирован по id asc, если вы нажмете еще раз, измените порядок в обратном порядке.

Затем вы нажимаете на кнопку «Создать», создается пустая новая запись,отправляет его на сервер и получает результирующую запись с заполненным полем id, обновляет сетку, но ... не учитывает сортировку: при синхронизации возвращаемый идентификатор имеет значение очень высокоеи он остается на вершине, независимо от порядка сортировки.Что я делаю не так?

Большое спасибо

(PS Я спрашиваю в stackoverflow, потому что форум Сенчи, кажется, перегружен)

Ответы [ 2 ]

4 голосов
/ 18 октября 2011

В аналогичной ситуации решение, которое я нашел, заключается в добавлении store.sort в обработчик событий 'write' магазина.

Ext.application({

    (...)

    launch: function() {

        var myStore = this.getStore('myStore');
        myStore.on('write', function(store, operation){ store.sort('id','ASC') }; );

    }

});

Адаптируйте параметры сортировки к вашим потребностям. Документация для метода сортировки.

Если на прокси вашего магазина установлено writer, сортировка также будет запускаться для простого «обновления». Чтобы избежать этой ситуации, вы можете проверить значение параметра operation. Документация для события write.

Я не знаю, является ли это лучшим способом сделать это, это единственный, который я нашел на данный момент.

1 голос
/ 03 июля 2014

Вот еще одно решение:

Ext.define('My.data.Store', {
    extend: 'Ext.data.Store',

    sortOnWrite: false,

    resort: function () {

        var me = this;

        me.doSort(me.generateComparator());
    },

    onProxyWrite: function (operation) {

        var me = this;

        if (me.sortOnWrite && operation.wasSuccessful()) {

            me.resort();
        }
    }
});
...