Néha nehezen magyarázható meg az ügyfeleknek, hogy egy Grid-ben miért kell egyszerre lapozó is, meg görgetősáv is. Talán azért is, mert ezt én sem látom logikusnak. :)
Arra, hogy csak görgetősáv legyen, létezik több kezdeményezés is. (lásd. LiveGrid, vagy a BufferView) Ahhoz, hogy csak lapozó legyen, nem kell mást csinálni, mint meghatározni, hogy egy oldalra maximum hány sor fér ki, és csak annyit kell egyszerre megjeleníteni.
UPDATE: az elmúlt időszakban vissza-vissza nyúlam ehhez a kódhoz, apró változtatások több alkalommal is történtek. Egy idő után úgy döntöttem, hogy annyi apróság volt, hogy a mintakódot itt is lecserélem.
Első és legfontosabb, hogy mindenhol plugin-ként használom, így könnyebben hordozható. Eredetileg a Math.floor helyett parseInt –et használtam, eredmény szempontjából lényegtelen, de így mégis beszédesebb. Látszódik, hogy szándékosan lefelé kerekítünk. Az első verzió még használta a render eseményt is, ám az felesleges volt, mivel a grid létrehozáskor a resize esemény is lefut. Továbbá érdemes figyelni azt is, hogy szükséges-e az újratöltés, vagy sem, ha a limit nem változik, akkor felesleges.
Azaz:
init: function (cmp) {
cmp.fixPageSize = function () {
var limit = Math.floor(this.getView().scroller.getHeight() / 21);
if (limit && this.getBottomToolbar().pageSize !== limit) {
this.getBottomToolbar().pageSize = limit;
this.getStore().load({params: {start: 0, limit: limit}});
}
};
cmp.on('resize', cmp.fixPageSize, cmp, {delay: 10});
cmp.getBottomToolbar().pageSize = null;
}
};
var store = ...;
var grid = new Ext.grid.GridPanel({
...,
store: store,
bbar: new Ext.PagingToolbar({
store: store,
displayInfo: true
}),
plugins: [pageSizePlugin]
});
Nézd meg élőbe: http://stack.hu/extjs/page_size_plugin.php