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

ExtJs getTotalCount() not returning the number of records in the store

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

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

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

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

但问题是当我写

console.log(store.getTotalCount());

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

有人可以帮我确定为什么它不显示商店中记录数量的实际计数。

我感觉可能是调用函数的时候store还没有加载完(可能我理解的不对)

以下是我店铺的代码:

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,
});

使用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());
    }
});

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

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

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

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,
});

PS - 您的服务需要 return 计数。 getTotalCount() 不会 return 您的商店包含多少条记录,它 return 是 reader 对象的 totalProperty 持有的数量。

因此,如果您的服务正在 return 处理数据 -

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

你的 reader 对象看起来像 -

 reader: {
                type: 'json',
                root: 'usrdata',
                totalProperty : 'total'
                successProperty: 'success'
            },