Results 1 to 3 of 3

Thread: removeAll on buffered grid causes error in cancelAllPrefetches

    Success! Looks like we've fixed this one. According to our records the fix was applied for EXTJS-6194 in a recent build.
  1. #1
    Ext JS Premium Member
    Join Date
    Mar 2009
    Vote Rating

    Default removeAll on buffered grid causes error in cancelAllPrefetches

    Ext version tested:
    • Ext 4.1 release
    Browser versions tested against:
    • FF
    • Remove all is not possible in a buffered grid. Errors occur in cancelAllPrefetches
    Steps to reproduce the problem:
    • use the buffered grid example
    • add a store.removeAll to the end of the script
    • run the script
    The result that was expected:
    • the items to be removed from the grid
    The result that occurs instead:
    • an error ( can't convert undefined to object ) occurs in cancelAllPrefetches
    • req is undefined, so deleting it while referencing .callback throws an error
    Test Case:
    this is the buffered grid example with a remove all at the end
    Ext.define('Employee', {
        extend: '',
        fields: [
           {name: 'rating', type: 'int'},
           {name: 'salary', type: 'float'},
           {name: 'name'},
           {name: 'percent'}
         * Returns an array of fake data
         * @param {Number} count The number of fake rows to create data for
         * @return {Array} The fake record data, suitable for usage with an ArrayReader
        function createFakeData(count) {
            var firstNames   = ['Ed', 'Tommy', 'Aaron', 'Abe', 'Jamie', 'Adam', 'Dave', 'David', 'Jay', 'Nicolas', 'Nige'],
                lastNames    = ['Spencer', 'Maintz', 'Conran', 'Elias', 'Avins', 'Mishcon', 'Kaneda', 'Davis', 'Robinson', 'Ferrero', 'White'],
                ratings      = [1, 2, 3, 4, 5],
                salaries     = [100, 400, 900, 1500, 1000000];
            var data = [];
            for (var i = 0; i < (count || 25); i++) {
                var ratingId    = Math.floor(Math.random() * ratings.length),
                    salaryId    = Math.floor(Math.random() * salaries.length),
                    firstNameId = Math.floor(Math.random() * firstNames.length),
                    lastNameId  = Math.floor(Math.random() * lastNames.length),
                    rating      = ratings[ratingId],
                    salary      = salaries[salaryId],
                    name        = Ext.String.format("{0} {1}", firstNames[firstNameId], lastNames[lastNameId]);
                    rating: rating,
                    salary: salary,
                    name: name
            return data;
        // Create the Data Store.
        // Because it is buffered, the automatic load will be directed
        // through the prefetch mechanism, and be read through the page cache
        var store = Ext.create('', {
            id: 'store',
            // allow the grid to interact with the paging scroller by buffering
            buffered: true,
            // Configure the store with a single page of records which will be cached
            pageSize: 5000,
            data: createFakeData(5000),
            model: 'Employee',
            proxy: {
                type: 'memory'
        var grid = Ext.create('Ext.grid.Panel', {
            width: 700,
            height: 500,
            title: 'Bufffered Grid of 5,000 random records',
            store: store,
            loadMask: true,
            disableSelection: true,
            viewConfig: {
                trackOver: false
            // grid columns
                xtype: 'rownumberer',
                width: 40,
                sortable: false
                text: 'Name',
                flex:1 ,
                sortable: true,
                dataIndex: 'name'
                text: 'Rating',
                width: 125,
                sortable: true,
                dataIndex: 'rating'
                text: 'Salary',
                width: 125,
                sortable: true,
                dataIndex: 'salary',
                align: 'right',
                renderer: Ext.util.Format.usMoney
            renderTo: Ext.getBody()

  2. #2
    Sencha - Support Team scottmartin's Avatar
    Join Date
    Jul 2010
    Houston, Tx
    Vote Rating


    Thank you for the report.


  3. #3
    Sencha User
    Join Date
    Jun 2012
    Vote Rating


    This problem was not fixes entirely. The problem is related to other "problem". I try to explain it.

    Let's say I have a buffered grid with 1000 result and 200rows per page. When I filter remote I will have only 82 result. Somehow the server gets two calls (for page 1 and 2) . First page get rows from 1 to 82. the seconds gets 0 .

    Because of that when I try a removeAll after these event it will try to delete an undfiened page.

    It worked if I do the following overide. Probably I should override pre prefetch method where some line puts an "undedined" value for a page

    Ext.override(, {
        cancelAllPrefetches: function() {
            var me = this,
                reqs = me.pageRequests,
            if ( {
            for (page in reqs) {
                if (reqs.hasOwnProperty(page)) {
                    req = reqs[page];
                    delete reqs[page];
                    if(typeof req !== "undefined")                {
                        delete req.callback;
    I'm using ext-4.1.1a
    Last edited by catalinux1907; 22 Nov 2012 at 6:33 AM. Reason: I missed saying which version I used

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts