Changeset 11

Show
Ignore:
Timestamp:
08/29/08 17:11:23 (4 years ago)
Author:
tsuckowhomberg
Message:
  • fixed: (BufferedGridView?.js) fixed a bug that would not recalculate the scrollbar's height if the number of possible rows to display in the view would exceed the total number of records in the store
  • enhancement: (BufferedGridView?.js) last row in the grid is now clipped instead of removed if it is not fully displayable
  • fixed: (BufferedStore?.js) buffer range would not store the number of the total length of the records when last possible range is reached, but instead the number of the start-parameter with the "limit"-parameter, which lead to errors when a last possible record to render is requested that cannot be found in the store
Location:
trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/CHANGELOG

    r10 r11  
    1  
     1Version 0.2rc1 
     229-August-2008 
     3 
    24- fixes: 
     5 - BufferedGridView.js: fixed a bug that would not recalculate the scrollbar's 
     6height if the number of possible rows to display in the view would exceed the 
     7total number of records in the store 
    38 - BufferedRowSelectionModel: "selectRow()" would allow selecting indexes greater than 
    49the "totalLength"-property of the store; added condition to check whether the index is 
    510out of bounds (closes google issue 5) 
     11- BufferedStore.js: buffer range would not store the number of the total length 
     12of the records when last possible range is reached, but instead the number of the 
     13start-parameter with the "limit"-parameter, which lead to errors when a last 
     14possible record to render is requested that cannot be found in the store 
     15 
     16 - enhancements: 
     17- BufferedGridView.js: last row in the grid is now clipped instead of removed if 
     18it is not fully displayable 
     19 
     20 
    621 
    722Version 0.1.2 
  • trunk/src/BufferedGridView.js

    r8 r11  
    128128// {{{ --------------------------properties------------------------------------- 
    129129    /** 
     130     * Stores the height of the header. Needed for recalculating scroller inset height. 
     131     * @param {Number} 
     132     */ 
     133    hdHeight : 0, 
     134 
     135    /** 
     136     * Indicates wether the last row in the grid is clipped and thus not fully display. 
     137     * 1 if clipped, otherwise 0. 
     138     * @param {Number} 
     139     */ 
     140    rowClipped : 0, 
     141 
     142 
     143    /** 
    130144     * This is the actual y-scroller that does control sending request to the server 
    131145     * based upon the position of the scrolling cursor. 
     
    239253            this.lastRowIndex = 0; 
    240254            this.lastIndex    = 0; 
     255            this.adjustVisibleRows(); 
    241256            this.adjustScrollerPos(-this.liveScroller.dom.scrollTop, true); 
    242257            this.showLoadMask(false); 
     
    244259            //this.replaceLiveRows(0, true); 
    245260            this.fireEvent('cursormove', this, 0, 
    246                            Math.min(this.ds.totalLength, this.visibleRows), 
     261                           Math.min(this.ds.totalLength, this.visibleRows-this.rowClipped), 
    247262                           this.ds.totalLength); 
    248263        } else { 
     
    363378        this.liveScroller.on('scroll', this.onLiveScroll,  this, {buffer : this.scrollDelay}); 
    364379 
    365             this.mainHd = new E(this.mainWrap.dom.firstChild); 
     380        var thd = this.mainWrap.dom.firstChild; 
     381            this.mainHd = new E(thd); 
     382 
     383            this.hdHeight = thd.offsetHeight; 
     384 
    366385            this.innerHd = this.mainHd.dom.firstChild; 
    367386        this.scroller = new E(this.mainWrap.dom.childNodes[1]); 
     
    629648            this.adjustScrollerPos(-this.rowHeight, true); 
    630649            this.fireEvent('cursormove', this, this.rowIndex, 
    631                            Math.min(this.ds.totalLength, this.visibleRows), 
     650                           Math.min(this.ds.totalLength, this.visibleRows-this.rowClipped), 
    632651                           this.ds.totalLength); 
    633652 
     
    753772                // the cursor did virtually move 
    754773                this.fireEvent('cursormove', this, this.rowIndex, 
    755                                Math.min(this.ds.totalLength, this.visibleRows), 
     774                               Math.min(this.ds.totalLength, this.visibleRows-this.rowClipped), 
    756775                               this.ds.totalLength); 
    757776 
     
    812831            this.processRows(); 
    813832            this.fireEvent('cursormove', this, this.rowIndex, 
    814                            Math.min(this.ds.totalLength, this.visibleRows), 
     833                           Math.min(this.ds.totalLength, this.visibleRows-this.rowClipped), 
    815834                           this.ds.totalLength); 
    816835        } 
     
    11571176 
    11581177        var rowInd = row-this.rowIndex; 
    1159         if (row >= this.rowIndex+this.visibleRows) { 
     1178 
     1179        if (this.rowClipped && row == this.rowIndex+this.visibleRows-1) { 
     1180            this.adjustScrollerPos(this.rowHeight ); 
     1181        } else if (row >= this.rowIndex+this.visibleRows) { 
    11601182            this.adjustScrollerPos(((row-(this.rowIndex+this.visibleRows))+1)*this.rowHeight); 
    11611183        } else if (row <= this.rowIndex) { 
     
    11711193            cellEl = this.getCell(row-this.rowIndex, col); 
    11721194        } 
     1195 
    11731196        if(!rowEl){ 
    11741197            return; 
     
    12451268    { 
    12461269        this.fireEvent('cursormove', this, index, 
    1247                        Math.min(this.ds.totalLength, this.visibleRows), 
     1270                       Math.min(this.ds.totalLength, this.visibleRows-this.rowClipped), 
    12481271                       this.ds.totalLength); 
    12491272 
     
    14201443            if (append) { 
    14211444                this.removeRows(0, spill-1); 
    1422                 var html = this.renderRows(cursorBuffer+this.visibleRows-spill, 
    1423                            cursorBuffer+this.visibleRows-1); 
    1424                 Ext.DomHelper.insertHtml('beforeEnd', this.mainBody.dom, html); 
     1445 
     1446                if (cursor+this.visibleRows-1 < this.ds.bufferRange[1]) { 
     1447                    var html = this.renderRows(cursorBuffer+this.visibleRows-spill, 
     1448                               cursorBuffer+this.visibleRows-1); 
     1449                    Ext.DomHelper.insertHtml('beforeEnd', this.mainBody.dom, html); 
     1450                } 
    14251451            } else { 
    14261452                this.removeRows(this.visibleRows-spill, this.visibleRows-1); 
     
    14531479 
    14541480        // adjust the height of the scrollbar 
    1455         this.liveScroller.dom.style.height = this.liveScroller.dom.parentNode.offsetHeight + 
    1456                                              (Ext.isGecko 
    1457                                              ? ((ds.totalLength > 0 && scrollbar) 
    1458                                                 ? - this.horizontalScrollOffset 
    1459                                                 : 0) 
    1460                                              : (((ds.totalLength > 0 && scrollbar) 
    1461                                                 ? 0 : this.horizontalScrollOffset)))+"px"; 
     1481 
     1482        var contHeight = this.liveScroller.dom.parentNode.offsetHeight + 
     1483                         (Ext.isGecko 
     1484                         ? ((ds.totalLength > 0 && scrollbar) 
     1485                            ? - this.horizontalScrollOffset 
     1486                            : 0) 
     1487                         : (((ds.totalLength > 0 && scrollbar) 
     1488                            ? 0 : this.horizontalScrollOffset))) 
     1489 
     1490        this.liveScroller.dom.style.height = contHeight+"px"; 
     1491 
    14621492        if (this.rowHeight == -1) { 
    14631493            return; 
    14641494        } 
    14651495 
    1466         if (ds.totalLength <= this.visibleRows) { 
    1467             this.liveScrollerInset.style.height = "0px"; 
    1468             return; 
    1469         } 
    1470  
    1471         var height = this.rowHeight*ds.totalLength; 
    1472  
    1473         height += (c.getSize().height-(this.visibleRows*this.rowHeight)); 
    1474  
    1475         if (scrollbar) { 
    1476             height -= this.horizontalScrollOffset; 
    1477         } 
    1478  
    1479         this.liveScrollerInset.style.height = (height)+"px"; 
     1496        // calculate the spill of the inner layer. 
     1497        // spillHeight will contain the number of pixels 
     1498        // the inner layer exceeds the scrollbar 
     1499        var spillHeight = ((this.rowHeight*ds.totalLength)+this.hdHeight)-contHeight; 
     1500 
     1501        // hidden rows is the number of rows which cannot be 
     1502        // displayed and for which a scrollbar needs to be 
     1503        // rendered. This does alsso take clipped rows into account 
     1504        var hiddenRows = 0; 
     1505        if (spillHeight > 0) { 
     1506            hiddenRows = Math.ceil(spillHeight/this.rowHeight); 
     1507        } 
     1508 
     1509        this.liveScrollerInset.style.height = contHeight+(hiddenRows*this.rowHeight)+"px"; 
    14801510    }, 
    14811511 
     
    15141544        vh -= this.mainHd.getHeight(); 
    15151545 
     1546        var totalLength = ds.totalLength || 0; 
     1547 
    15161548        var visibleRows = Math.max(1, Math.floor(vh/this.rowHeight)); 
    15171549 
    1518         var totalLength = ds.getTotalCount(); 
    1519  
    1520         if (totalLength < this.visibleRows || this.visibleRows == visibleRows) { 
     1550        this.rowClipped = 0; 
     1551        if (this.rowHeight / 3 < (vh - (visibleRows*this.rowHeight))) { 
     1552            visibleRows = Math.min(visibleRows+1, totalLength); 
     1553            this.rowClipped = 1; 
     1554        } 
     1555 
     1556        // adjusted condition to force rerendering of scrollbar if the 
     1557        // toalLength is less than visibleRows 
     1558        if (this.visibleRows == visibleRows) { 
    15211559            return; 
    15221560        } 
     
    15251563 
    15261564        if (this.rowIndex + visibleRows > totalLength) { 
    1527             this.rowIndex     = Math.max(0, ds.totalLength-this.visibleRows); 
     1565            this.rowIndex     = Math.max(0, totalLength-visibleRows); 
    15281566            this.lastRowIndex = this.rowIndex; 
    1529             this.updateLiveRows(this.rowIndex, true); 
    1530         } else { 
    1531             this.updateLiveRows(this.rowIndex, true); 
    1532         } 
     1567        } 
     1568 
     1569        this.updateLiveRows(this.rowIndex, true); 
     1570 
    15331571    }, 
    15341572 
  • trunk/src/BufferedRowSelectionModel.js

    r10 r11  
    271271 
    272272 
    273  
    274273    /** 
    275274     * Deselects a row. 
  • trunk/src/BufferedStore.js

    r4 r11  
    22 * Ext.ux.grid.BufferedStore V0.9 
    33 * Copyright(c) 2007, http://www.siteartwork.de 
    4  *  
     4 * 
    55 * Licensed under the terms of the Open Source LGPL 3.0 
    66 * http://www.gnu.org/licenses/lgpl.html 
     
    2828 * Pending selections are represented by row indexes which have been selected but 
    2929 * which records have not yet been available in the store. The loadSelections method 
    30  * will initiate a request to the data repository (same url as specified in the  
     30 * will initiate a request to the data repository (same url as specified in the 
    3131 * url config parameter for the store) to fetch the pending selections. The additional 
    32  * parameter send to the server is the "ranges" parameter, which will hold a json  
     32 * parameter send to the server is the "ranges" parameter, which will hold a json 
    3333 * encoded string representing ranges of row indexes to load from the data repository. 
    3434 * As an example, pending selections with the indexes 1,2,3,4,5,9,10,11,16 would 
    3535 * have to be translated to [1,5],[9,11],[16]. 
    3636 * Please note, that by indexes we do not understand (primary) keys of the data, 
    37  * but indexes as represented by the view. To get the ranges of pending selections,  
    38  * you can use the getPendingSelections method of the BufferedRowSelectionModel, which  
     37 * but indexes as represented by the view. To get the ranges of pending selections, 
     38 * you can use the getPendingSelections method of the BufferedRowSelectionModel, which 
    3939 * should be used as the default selection model of the grid. 
    4040 * 
     
    6161 * computed by the underlying store's sort algorithm. Whenever a record should be 
    6262 * added to the store, the insert index should be calculated and the used as the 
    63  * parameter for the insert method. The findInsertIndex method will return a value  
    64  * that equals to Number.MIN_VALUE or Number.MAX_VALUE if the added record would not  
     63 * parameter for the insert method. The findInsertIndex method will return a value 
     64 * that equals to Number.MIN_VALUE or Number.MAX_VALUE if the added record would not 
    6565 * change the current state of the store. If that happens, this data is not available 
    6666 * in the store, and may be requested later on when a new request for new data is made. 
     
    6969 * -------- 
    7070 * remoteSort will always be set to true, no matter what value the user provides 
    71  * using the config object.  
     71 * using the config object. 
    7272 * 
    7373 * @constructor 
     
    7777 */ 
    7878Ext.ux.grid.BufferedStore = function(config) { 
    79      
     79 
    8080    config = config || {}; 
    81      
     81 
    8282    // remoteSort will always be set to true. 
    8383    config.remoteSort = true; 
    84      
     84 
    8585    Ext.apply(this, config); 
    86      
     86 
    8787    this.addEvents({ 
    8888         /** 
     
    112112          */ 
    113113        'selectionsload'       : true 
    114          
     114 
    115115    }); 
    116      
     116 
    117117    Ext.ux.grid.BufferedStore.superclass.constructor.call(this, config); 
    118      
     118 
    119119    this.totalLength = 0; 
    120      
     120 
    121121    /** 
    122122     * The array represents the range of rows available in the buffer absolute to 
     
    125125     */ 
    126126    this.bufferRange = [0, this.bufferSize]; 
    127      
     127 
    128128    this.on('clear', function (){ 
    129129        this.bufferRange = [0, this.bufferSize]; 
    130130    }, this); 
    131      
     131 
    132132    if(this.url && !this.selectionsProxy){ 
    133133        this.selectionsProxy = new Ext.data.HttpProxy({url: this.url}); 
    134134    } 
    135          
     135 
    136136}; 
    137137 
     
    144144     */ 
    145145    version : null, 
    146       
     146 
    147147    /** 
    148148     * Inserts a record at the position as specified in index. 
     
    151151     * the set of data in the underlying store has been changed. 
    152152     * If the index equals to 0 and the length of data in the store equals to 
    153      * bufferSize, the add-event will be triggered with Number.MIN_VALUE to  
    154      * indicate that a record has been prepended. If the index equals to  
     153     * bufferSize, the add-event will be triggered with Number.MIN_VALUE to 
     154     * indicate that a record has been prepended. If the index equals to 
    155155     * bufferSize, the method will assume that the record has been appended and 
    156156     * trigger the add event with index set to Number.MAX_VALUE. 
     
    158158     * Note: 
    159159     * ----- 
    160      * The index parameter is not a view index, but a value in the range of  
     160     * The index parameter is not a view index, but a value in the range of 
    161161     * [0, this.bufferSize]. 
    162162     * 
    163163     * You are strongly advised to not use this method directly. Instead, call 
    164      * findInsertIndex wirst and use the return-value as the first parameter for  
     164     * findInsertIndex wirst and use the return-value as the first parameter for 
    165165     * for this method. 
    166166     */ 
     
    169169        // hooray for haskell! 
    170170        records = [].concat(records); 
    171          
    172         index = index >= this.bufferSize ? Number.MAX_VALUE : index;  
    173          
    174         if (index == Number.MIN_VALUE || index == Number.MAX_VALUE) {  
     171 
     172        index = index >= this.bufferSize ? Number.MAX_VALUE : index; 
     173 
     174        if (index == Number.MIN_VALUE || index == Number.MAX_VALUE) { 
    175175            var l = records.length; 
    176176            if (index == Number.MIN_VALUE) { 
    177177                this.bufferRange[0] += l; 
    178                 this.bufferRange[1] += l;     
     178                this.bufferRange[1] += l; 
    179179            } 
    180              
     180 
    181181            this.totalLength += l; 
    182182            this.fireEvent("add", this, records, index); 
    183183            return; 
    184         }  
     184        } 
    185185 
    186186        var split = false; 
     
    188188        if (records.length + index >= this.bufferSize) { 
    189189            split = true; 
    190             insertRecords = records.splice(0, this.bufferSize-index)     
     190            insertRecords = records.splice(0, this.bufferSize-index) 
    191191        } 
    192192        this.totalLength += insertRecords.length; 
    193          
     193 
    194194        for (var i = 0, len = insertRecords.length; i < len; i++) { 
    195195            this.data.insert(index, insertRecords[i]); 
    196196            insertRecords[i].join(this); 
    197197        } 
    198          
     198 
    199199        while (this.getCount() > this.bufferSize) { 
    200200            this.data.remove(this.data.last()); 
    201201        } 
    202          
     202 
    203203        this.fireEvent("add", this, insertRecords, index); 
    204          
     204 
    205205        if (split == true) { 
    206206            this.fireEvent("add", this, records, Number.MAX_VALUE); 
    207207        } 
    208     },      
    209      
     208    }, 
     209 
    210210    /** 
    211211     * Remove a Record from the Store and fires the remove event. 
    212212     * 
    213      * If the record is not within the store, the method will try to guess it's  
     213     * If the record is not within the store, the method will try to guess it's 
    214214     * index by calling findInsertIndex. 
    215215     * 
     
    239239    { 
    240240        var index = this.data.indexOf(record); 
    241          
     241 
    242242        if (index < 0) { 
    243243            var ind = this.findInsertIndex(record); 
     
    251251        this.bufferRange[1]--; 
    252252        this.data.removeAt(index); 
    253         
     253 
    254254        if(this.pruneModifiedRecords){ 
    255255            this.modified.remove(record); 
    256256        } 
    257          
     257 
    258258        this.totalLength -= 1; 
    259259        this.fireEvent("remove", this, record, index); 
     
    270270        this.totalLength = 0; 
    271271        this.data.clear(); 
    272          
     272 
    273273        if(this.pruneModifiedRecords){ 
    274274            this.modified = []; 
    275275        } 
    276276        this.fireEvent("clear", this); 
    277     },     
    278          
     277    }, 
     278 
    279279    /** 
    280280     * Requests a range of data from the underlying data store. Similiar to the 
     
    283283     * Example: To load all records at the positions 1,2,3,4,9,12,13,14, the supplied 
    284284     * parameter should equal to [[1,4],[9],[12,14]]. 
    285      * The request will only be done if the beforeselectionsloaded events return  
     285     * The request will only be done if the beforeselectionsloaded events return 
    286286     * value does not equal to false. 
    287287     */ 
     
    289289    { 
    290290        var max_i = ranges.length; 
    291          
     291 
    292292        if(max_i > 0 && !this.selectionsProxy.activeRequest 
    293293           && this.fireEvent("beforeselectionsload", this, ranges) !== false){ 
    294              
     294 
    295295            var lParams = this.lastOptions.params; 
    296              
     296 
    297297            var params = {}; 
    298298            params.ranges = Ext.encode(ranges); 
    299              
     299 
    300300            if (lParams) { 
    301301                if (lParams.sort) { 
     
    306306                } 
    307307            } 
    308              
     308 
    309309            var options = {}; 
    310310            for (var i in this.lastOptions) { 
    311311                options.i = this.lastOptions.i; 
    312312            } 
    313              
     313 
    314314            options.ranges = params.ranges; 
    315              
    316             this.selectionsProxy.load(params, this.reader,  
    317                             this.selectionsLoaded, this,  
    318                             options);     
    319         }      
    320     }, 
    321      
     315 
     316            this.selectionsProxy.load(params, this.reader, 
     317                            this.selectionsLoaded, this, 
     318                            options); 
     319        } 
     320    }, 
     321 
    322322    /** 
    323323     * Alias for loadRanges. 
    324      */     
     324     */ 
    325325    loadSelections : function(ranges) 
    326326    { 
    327327        this.loadRanges(ranges); 
    328328    }, 
    329      
     329 
    330330    /** 
    331331     * Called as a callback by the proxy which loads pending selections. 
     
    337337    { 
    338338        if (this.checkVersionChange(o, options, success) !== false) { 
    339             this.fireEvent("selectionsload", this, o.records, Ext.decode(options.ranges));     
     339            this.fireEvent("selectionsload", this, o.records, Ext.decode(options.ranges)); 
    340340        } else { 
    341341            this.fireEvent("selectionsload", this, [], Ext.decode(options.ranges)); 
     
    344344 
    345345    /** 
    346      * Checks if the version supplied in <tt>o</tt> differs from the version  
     346     * Checks if the version supplied in <tt>o</tt> differs from the version 
    347347     * property of the current instance of this object and fires the versionchange 
    348348     * event if it does. 
     
    350350    // private 
    351351    checkVersionChange : function(o, options, success) 
    352     {     
     352    { 
    353353        if(o && success !== false){ 
    354354            if (o.version !== undefined) { 
    355355                var old      = this.version; 
    356                 this.version = o.version;     
     356                this.version = o.version; 
    357357                if (this.version !== old) { 
    358358                    return this.fireEvent('versionchange', this, old, this.version); 
    359359                } 
    360             }  
    361         }     
    362     }, 
    363      
    364     /** 
    365      * The sort procedure tries to respect the current data in the buffer. If the  
    366      * found index would not be within the bufferRange, Number.MIN_VALUE is returned to  
    367      * indicate that the record would be sorted below the first record in the buffer  
    368      * range, while Number.MAX_VALUE would indicate that the record would be added after  
     360            } 
     361        } 
     362    }, 
     363 
     364    /** 
     365     * The sort procedure tries to respect the current data in the buffer. If the 
     366     * found index would not be within the bufferRange, Number.MIN_VALUE is returned to 
     367     * indicate that the record would be sorted below the first record in the buffer 
     368     * range, while Number.MAX_VALUE would indicate that the record would be added after 
    369369     * the last record in the buffer range. 
    370370     * 
    371      * The method is not guaranteed to return the relative index of the record  
     371     * The method is not guaranteed to return the relative index of the record 
    372372     * in the data model as returned by the underlying domain model. 
    373373     */ 
     
    377377        var index = Ext.ux.grid.BufferedStore.superclass.findInsertIndex.call(this, record); 
    378378        this.remoteSort = true; 
    379          
     379 
    380380        if (this.bufferRange[0] > 0 && index == 0) { 
    381             index = Number.MIN_VALUE;     
     381            index = Number.MIN_VALUE; 
    382382        } else if (index >= this.bufferSize) { 
    383383            index = Number.MAX_VALUE; 
    384384        } 
    385          
     385 
    386386        return index; 
    387     },     
    388      
     387    }, 
     388 
    389389    /** 
    390390     * Removed snapshot check 
     
    400400        }; 
    401401        this.data.sort(direction, fn); 
    402     },     
    403      
    404  
    405      
    406     /** 
    407      * @cfg {Number} bufferSize The number of records that will at least always  
     402    }, 
     403 
     404 
     405 
     406    /** 
     407     * @cfg {Number} bufferSize The number of records that will at least always 
    408408     * be available in the store for rendering. This value will be send to the 
    409409     * server as the <tt>limit</tt> parameter and should not change during the 
    410      * lifetime of a grid component. Note: In a paging grid, this number would  
     410     * lifetime of a grid component. Note: In a paging grid, this number would 
    411411     * indicate the page size. 
    412      * The value should be set high enough to make a userfirendly scrolling  
    413      * possible and should be greater than the sum of {nearLimit} and  
     412     * The value should be set high enough to make a userfirendly scrolling 
     413     * possible and should be greater than the sum of {nearLimit} and 
    414414     * {visibleRows}. Usually, a value in between 150 and 200 is good enough. 
    415415     * A lesser value will more often make the store re-request new data, while 
    416416     * a larger number will make loading times higher. 
    417      */     
    418      
    419      
     417     */ 
     418 
     419 
    420420    // private 
    421421    onMetaChange : function(meta, rtype, o) 
    422422    { 
    423423        this.version = null; 
    424         Ext.ux.grid.BufferedStore.superclass.onMetaChange.call(this, meta, rtype, o);     
    425     },         
    426      
    427     
     424        Ext.ux.grid.BufferedStore.superclass.onMetaChange.call(this, meta, rtype, o); 
     425    }, 
     426 
     427 
    428428    /** 
    429429     * Will fire the versionchange event if the version of incoming data has changed. 
     
    433433    { 
    434434        this.checkVersionChange(o, options, success); 
    435          
     435 
    436436        // we have to stay in sync with rows that may have been skipped while 
    437437        // the request was loading. 
    438438        this.bufferRange = [ 
    439             options.params.start,  
    440             options.params.start+options.params.limit 
     439            options.params.start, 
     440            Math.min(options.params.start+options.params.limit, o.totalRecords) 
    441441        ]; 
    442              
    443         Ext.ux.grid.BufferedStore.superclass.loadRecords.call(this, o, options, success);     
    444     },     
    445      
     442 
     443        Ext.ux.grid.BufferedStore.superclass.loadRecords.call(this, o, options, success); 
     444    }, 
     445 
    446446    /** 
    447447     * Get the Record at the specified index. 
     
    456456        var modelIndex = index - this.bufferRange[0]; 
    457457        return this.data.itemAt(modelIndex); 
    458     },     
    459      
     458    }, 
     459 
    460460//--------------------------------------EMPTY----------------------------------- 
    461461    // no interface concept, so simply overwrite and leave them empty as for now 
    462462    clearFilter : function(){}, 
    463     isFiltered : function(){},   
    464     collect : function(){},       
     463    isFiltered : function(){}, 
     464    collect : function(){}, 
    465465    createFilterFn : function(){}, 
    466466    sum : function(){}, 
     
    470470    queryBy : function(){}, 
    471471    find : function(){}, 
    472     findBy : function(){}     
    473      
     472    findBy : function(){} 
     473 
    474474});