ExtJs getTotalCount()不返回商店中的记录数

时间:2016-03-26 11:53:46

标签: javascript json extjs extjs4.2 extjs5

当我从控制器调用函数时,按以下方式加载商店中的数据,

var store= new Ext.getStore('MyStore');
store.load();     

响应标头显示返回以下JSON数据

{"usrdata":[{"name":"John",
             "roll":"5",
             "address":"abcd"
           }]
}

但问题是我写的时候

console.log(store.getTotalCount());

在控制台上显示“0”(零)。

请有人帮我确认一下为什么它没有显示商店中记录数的实际数量。

我觉得可能是因为调用函数时商店还没有完成加载(可能是我不正确)。

以下是我店的代码:

Ext.define('MyApp.store.MyStore', {
    extend: 'Ext.data.Store',
     model: 'MyApp.model.MyModel',

    timeout : 60000,
    proxy: {
        type: 'ajax',
        api: {
            create: 'php/insert.php', 
            read: 'php/read.php',
            update: 'php/update.php',
            destroy: 'php/delete.php',
        },
        reader: {
            type: 'json',
            root: 'usrdata',
            successProperty: 'success'
        },
        writer: {
            type: 'json',
            writeAllFields: true,
            encode: true,
            root: 'usrdata'
        }
    },
    autoLoad: true,
});

3 个答案:

答案 0 :(得分:1)

使用load方法中的回调来获取记录计数:http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.data.Store-method-load

store.load({
    scope: this,
    callback: function(records, operation, success) {
        // the operation object
        // contains all of the details of the load operation
        console.log(records.length);
        // Alternative
        console.log(store.getTotalCount());
    }
});

答案 1 :(得分:0)

以防我们解决错误的问题。通常你会希望总计数器总是从你的数据服务器返回,这样分页等都会自动运行。有关示例,请参阅here

{
    "total": 122,
    "offset": 0,
    "users": [
        {
            "id": "ed-spencer-1",
            "value": 1,
            "user": {
                "id": 1,
                "name": "Ed Spencer",
                "email": "ed@sencha.com"
            }
        }
    ]
}

答案 2 :(得分:0)

您的商店定义需要进行微小的更改



Ext.define('MyApp.store.MyStore', {
    extend: 'Ext.data.Store',
     model: 'MyApp.model.MyModel',

    timeout : 60000,
    proxy: {
        type: 'ajax',
        api: {
            create: 'php/insert.php', 
            read: 'php/read.php',
            update: 'php/update.php',
            destroy: 'php/delete.php',
        },
        reader: {
            type: 'json',
            root: 'usrdata',
            totalProperty : '<the_node_of_json_response_which_holds_the_count>'
            successProperty: 'success'
        },
        writer: {
            type: 'json',
            writeAllFields: true,
            encode: true,
            root: 'usrdata'
        }
    },
    autoLoad: true,
});
&#13;
&#13;
&#13;

PS - 您的服务需要返回计数。 getTotalCount()不返回商店包含的记录数,它返回reader对象的totalProperty所包含的数字。

因此,如果您的服务正在返回数据 -

&#13;
&#13;
{
    "total": 122,
    "offset": 0,
    "users": [
        {
            "id": "ed-spencer-1",
            "value": 1,
            "user": {
                "id": 1,
                "name": "Ed Spencer",
                "email": "ed@sencha.com"
            }
        }
    ]
}
&#13;
&#13;
&#13;

您的读者对象看起来像 -

&#13;
&#13;
 reader: {
                type: 'json',
                root: 'usrdata',
                totalProperty : 'total'
                successProperty: 'success'
            },
&#13;
&#13;
&#13;