#javascript #extjs
#javascript #extjs
Вопрос:
Я использую сетку с большим количеством записей. Но когда я использую буферизованный рендеринг с включенной блокировкой, он не печатает все записи. Вот скрипка для вышеупомянутого. https://fiddle.sencha.com/#fiddle/39sdamp;view/editor Если вы прокомментируете ‘enableLocking: true’, он напечатает все записи, в противном случае он показывает ограниченные записи. Я хочу использовать как блокировку, так и буферизацию вместе. Как я могу это сделать?
Комментарии:
1. Я вижу одинаковое количество записей в любом случае. 108 записей.
2. Вы также должны прокомментировать locked:true из первого столбца. Он покажет вам все записи.
Ответ №1:
Проблема в том, что функция инициализации из Ext.grid.plugin.BufferedRenderer зависит от представления.lockingPartner, который не определен при вызове init.
Это переопределение устраняет проблему
Ext.define('BufferedRendererInit', {
override: 'Ext.grid.plugin.BufferedRenderer',
// Initialize this as a plugin
init: function(grid) {
var me = this,
view = grid.view,
viewListeners = {
beforerefresh: me.onViewBeforeRefresh,
refresh: me.onViewRefresh,
columnschanged: me.checkVariableRowHeight,
scope: me,
destroyable: true
},
scrollerListeners = {
scroll: me.onViewScroll,
scope: me
},
initialConfig = view.initialConfig;
//start override
//original code: view.lockingPartner is undefined.
//me.scroller = view.lockingPartner ? view.ownerGrid.scrollable : view.getScrollable();
var isLockingOwnerGrid = view.ownerGrid amp;amp; view.ownerGrid.lockedGridConfig amp;amp; view.ownerGrid.normalGridConfig;
me.scroller = isLockingOwnerGrid ? view.ownerGrid.scrollable : view.getScrollable();
//end override
// If we are going to be handling a NodeStore then it's driven by node addition and removal,
// *not* refreshing. The view overrides required above change the view's onAdd and onRemove
// behaviour to call onDataRefresh when necessary.
if (grid.isTree || (grid.ownerLockable amp;amp; grid.ownerLockable.isTree)) {
view.blockRefresh = false;
// Set a load mask if undefined in the view config.
if (initialConfig amp;amp; initialConfig.loadMask === undefined) {
view.loadMask = true;
}
}
if (view.positionBody) {
viewListeners.refresh = me.onViewRefresh;
}
me.grid = grid;
me.view = view;
me.isRTL = view.getInherited().rtl;
view.bufferedRenderer = me;
view.preserveScrollOnRefresh = true;
view.animate = false;
// It doesn't matter if it's a FeatureStore or a DataStore.
// The important thing is to only bind the same Type of store in future operations!
me.bindStore(view.dataSource);
// Use a configured rowHeight in the view
if (view.hasOwnProperty('rowHeight')) {
me.rowHeight = view.rowHeight;
}
me.position = 0;
me.viewListeners = view.on(viewListeners);
// Listen to the correct scroller. Either the view's one, or of it is
// in a lockable assembly, the y scroller which scrolls them both.
// If the view is not scrollable, this will be falsy.
if (me.scroller) {
me.scrollListeners = me.scroller.on(scrollerListeners);
}
}
});