ExtJS:Ext.grid.Panel:如何在store.sync()之后保持排序顺序?

时间:2011-09-18 05:45:35

标签: extjs datagrid gridpanel

我有一个很好用的Ext.grid.Panel,你可以点击列标题进行“自动”排序。 商店有“autoSync:true”。 我有一个“新”按钮,当用户点击它时,它会创建一个空记录,而不用 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字段已完成的结果记录,更新网格,但是......不要考虑帐号排序:当它被同步时,返回的id 非常高并且它保持在顶部,无论排序顺序如何。我做错了什么?

非常感谢

(PS我在stackoverflow上问,因为Sencha的论坛似乎不堪重负)

2 个答案:

答案 0 :(得分:4)

在类似的情况下,我发现的解决方案是在商店的'write'事件处理程序中添加store.sort。

Ext.application({

    (...)

    launch: function() {

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

    }

});

根据您的需要调整排序参数。 Documentation用于'sort'方法。

如果您在商店的代理上设置了writer,那么排序也会触发一个简单的“更新”。要避免这种情况,您可以测试operation参数的值。 Documentation用于'写'事件。

我不知道这是不是更好的方式,它是我现在唯一找到的。

答案 1 :(得分:1)

这是另一个解决方案:

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();
        }
    }
});