<!DOCTYPE html>
|
<html>
|
<head>
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<title>The source code</title>
|
<link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
|
<script type="text/javascript" src="../resources/prettify/prettify.js"></script>
|
<style type="text/css">
|
.highlight { display: block; background-color: #ddd; }
|
</style>
|
<script type="text/javascript">
|
function highlight() {
|
document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
|
}
|
</script>
|
</head>
|
<body onload="prettyPrint(); highlight();">
|
<pre class="prettyprint lang-js"><span id='Ext-grid-plugin-BufferedRendererTableView'>/**
|
</span> * @private
|
* A set of overrides required by the presence of the BufferedRenderer plugin.
|
*
|
* These overrides of Ext.view.Table take into account the affect of a buffered renderer and
|
* divert execution from the default course where necessary.
|
*/
|
Ext.define('Ext.grid.plugin.BufferedRendererTableView', {
|
override: 'Ext.view.Table',
|
|
<span id='Ext-grid-plugin-BufferedRendererTableView-method-onAdd'> // Listener function for the Store's add event
|
</span> onAdd: function(store, records, index) {
|
var me = this,
|
bufferedRenderer = me.bufferedRenderer,
|
rows = me.all;
|
|
// The newly added records will put us over the buffered view size, so we cannot just add as normal.
|
if (me.rendered && bufferedRenderer && (rows.getCount() + records.length) > bufferedRenderer.viewSize) {
|
|
// Index puts the new row(s) in the visible area, then we have to refresh the view
|
if (index < rows.startIndex + bufferedRenderer.viewSize && (index + records.length) > rows.startIndex) {
|
me.refreshView();
|
}
|
// New rows outside of visible area, just ensure that the scroll range is updated
|
else {
|
bufferedRenderer.stretchView(me, bufferedRenderer.getScrollHeight());
|
}
|
}
|
// No BufferedRenderer present
|
// or
|
// View has not yet reached the viewSize: we can add as normal.
|
else {
|
me.callParent([store, records, index]);
|
}
|
},
|
|
<span id='Ext-grid-plugin-BufferedRendererTableView-method-onRemove'> onRemove: function(store, records, indices) {
|
</span> var me = this,
|
bufferedRenderer = me.bufferedRenderer;
|
|
// Ensure all records are removed from the view
|
me.callParent([store, records, indices]);
|
|
// If there's a BufferedRenderer, the view must refresh to keep the view correct.
|
// Removing *may* have removed all of the rendered rows, leaving whitespace below the group header,
|
// so the refresh will be needed to keep the buffer rendered zone valid - to pull records up from
|
// below the removed zone into visibility.
|
if (me.rendered && bufferedRenderer) {
|
if (me.dataSource.getCount() > bufferedRenderer.viewSize) {
|
me.refreshView();
|
}
|
// No overflow, still we have to ensure the scroll range is updated
|
else {
|
bufferedRenderer.stretchView(me, bufferedRenderer.getScrollHeight());
|
}
|
}
|
},
|
|
<span id='Ext-view-Table-method-onDataRefresh'> // When there's a buffered renderer present, store refresh events cause TableViews to go to scrollTop:0
|
</span> onDataRefresh: function() {
|
var me = this;
|
|
if (me.bufferedRenderer) {
|
// Clear NodeCache. Do NOT remove nodes from DOM - that would blur the view, and then refresh will not refocus after the refresh.
|
me.all.clear();
|
me.bufferedRenderer.onStoreClear();
|
}
|
me.callParent();
|
}
|
});
|
</pre>
|
</body>
|
</html>
|