13693261870
2022-09-16 354b3dbfbffb3df45212a2a44dbbf48b4acc2594
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<!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 &amp;&amp; bufferedRenderer &amp;&amp; (rows.getCount() + records.length) &gt; bufferedRenderer.viewSize) {
 
            // Index puts the new row(s) in the visible area, then we have to refresh the view
            if (index &lt; rows.startIndex + bufferedRenderer.viewSize &amp;&amp; (index + records.length) &gt; 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 &amp;&amp; bufferedRenderer) {
            if (me.dataSource.getCount() &gt; 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>