我有一个很好用的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的论坛似乎不堪重负)
答案 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();
}
}
});