4

我有一个很好用的 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 的论坛似乎已经不堪重负)

4

2 回答 2

4

在类似的情况下,我找到的解决方案是在商店的“写入”事件处理程序中添加一个 store.sort。

Ext.application({

    (...)

    launch: function() {

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

    }

});

根据您的需要调整排序参数。“排序”方法的文档

如果您writer在商店的代理上有一个集合,排序也会触发一个简单的“更新”。为避免这种情况,您可以测试operation参数的值。 “写”事件的文档

我不知道这是否是更好的方法,这是我目前唯一找到的方法。

于 2011-10-18T14:01:34.217 回答
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();
        }
    }
});
于 2014-07-03T02:13:05.727 回答