jimmifett
30 Aug 2012, 9:58 AM
After a store.insert(0, record), I end up like this:
1 data1 data2
1 data1 data2
2 data1 data2
3 data1 data2
4 data1 data2
etc.
How can I get the rownumberer to reset after the insert?
Zdeno
30 Aug 2012, 11:10 AM
Try call
grid.getView().refresh(); after insert.
jimmifett
30 Aug 2012, 12:07 PM
First thing I tried :)
Have done after insert call, inside an add listener on the store, and manually refreshing from console.
scottmartin
30 Aug 2012, 2:09 PM
If you look at how it works, you will see that RowNumberer :: renderer uses
record.indexOfTotal(Record)
When you insert the record, there is no record.index value, .. so it returns 0 twice, hence you see 1, 1, 2, 3, 4.
You could override record.indexOfTotal() to fix thjis.
Ext.override(Ext.grid.RowNumberer, {
renderer: function(value, metaData, record, rowIdx, colIdx, store) {
var rowspan = this.rowspan;
if (rowspan){
metaData.tdAttr = 'rowspan="' + rowspan + '"';
}
metaData.tdCls = Ext.baseCSSPrefix + 'grid-cell-special';
console.log(store.indexOfTotal(record));
console.log(store.getTotalCount());
console.log(store.data.items.length);
console.log(record);
console.log('**');
return store.indexOfTotal(record) + 1;
}
});
var store = Ext.create('Ext.data.Store', {
storeId : 'simpsonsStore',
fields : ['name', 'email', 'change'],
data : {'items' : [
{ 'name' : 'Lisa', 'email' : 'lisa@simpsons.com', 'change' : 100 },
{ 'name' : 'Bart', 'email' : 'bart@simpsons.com', 'change' : -20 },
{ 'name' : 'Homer', 'email' : 'home@simpsons.com', 'change' : 23 },
{ 'name' : 'Marge', 'email' : 'marge@simpsons.com', 'change' : -11 }
]},
proxy : {
type : 'memory',
reader : {
type : 'json',
root : 'items'
}
}
});
var grid = Ext.create('Ext.grid.Panel', {
title : 'Simpsons',
store : Ext.data.StoreManager.lookup('simpsonsStore'),
columns : [
{ xtype: 'rownumberer' },
{ header : 'Name', dataIndex : 'name' },
{ header : 'Email', dataIndex : 'email', flex : 1 },
{ header : 'Change', dataIndex : 'change' }
],
height : 200,
width : 400,
renderTo : Ext.getBody()
});
myrec = { name: 'new name'};
store.insert(0,myrec);
console.log('-----------------------');
console.log(store.data.items.length);
Scott.
jimmifett
31 Aug 2012, 12:47 PM
Thanks Scott!
That helped point me in the right direction!
I add:
if(record.phantom)
{ return '*'; }
before the regular return in the override.
benjamineberle
29 Jan 2013, 9:08 PM
Scott,
Can we expect that the renderer's store.indexOfTotal() gets replaced with store.indexOf() sometimes soon?
Rownumberer is anyway not a key, so I guess this would be the more natural behaviour.
Just trying to avoid overrides for later maintenance...
Thanks
Powered by vBulletin® Version 4.1.5 Copyright © 2013 vBulletin Solutions, Inc. All rights reserved.