存储内容与rest代理给出不正确的计数

时间:2015-12-04 20:33:42

标签: rest extjs store

ExtJS 5.1.x,有几个商店使用rest proxy。

以下是一个例子:

Ext.define('cardioCatalogQT.store.TestResults', {
    extend: 'Ext.data.Store',
    alias: 'store.TestResults',
    config:{
        fields: [
            {name: 'attribute', type: 'string'},
            {name: 'sid', type: 'string'},
            {name: 'value_s', type: 'string'},
            {name: 'value_d', type: 'string'}
        ],
        model: 'cardioCatalogQT.model.TestResult',
        storeId: 'TestResults',
        autoLoad: true,
        pageSize: undefined,
        proxy: {
            url: 'http://127.0.0.1:5000/remote_results_get',
            type: 'rest',
            reader: {
                type: 'json',
                rootProperty: 'results'
            }
        }
    }
});

当API中发生某些事情时,将填充此商店。在填充商店之后,我需要做一些基本的事情,比如计算一个属性的不同实例的数量,比如说sid,我这样做:

test_store =  Ext.getStore('TestResults');
n = test_store.collect('sid').length);

问题是我必须刷新浏览器才能获得正确的值,' n,'否则,计数不对。我正在做test_store.load(),实际上,在.load()发出后,请求被发送到服务器。

我直接查询后端数据库,看看表中有哪些数据,并计算与test_store.collect('sid').length);给出的值进行比较。奇怪的是我也在调试器中打印出商店对象,并且预期的记录(与数据库表中的内容相比)显示在data.items数组下,但{{1}给出的值不对。

这是在成功回调中按顺序完成的。我想知道是否存在某种异步行为,这使得我在商店的内容和商店内容的数量之间存在不一致的结果?

我用另一个使用rest代理的商店测试了它,它具有相同的行为。另一方面,使用localStorage代理可以提供与商店记录/模型实例一致的正确计数。

这是相关的相关代码,Ajax请求会触发并正确执行其操作,并点击此成功回调。真的没有什么有趣的...问题部分是在test_store.collect('sid').length之后我到达商店,打印商店的内容,加载/同步然后打印商店(它只是工作罚款)然后最后按console.log('TEST STORE HERE');属性打印唯一分组项目的长度(这是不起作用的):

sid

为了完整性,这里是data.items数组输出success: function(response) { json = Ext.decode(response.responseText); if(json !== null && typeof (json) !== 'undefined'){ for (i = 0, max = json.items.length; i < max; i += 1) { if (print_all) { records.push({ sid: json.items[i].sid, attribute: json.items[i].attribute, string: json.items[i].value_s, number: json.items[i].value_d }); } else { records.push({ sid: json.items[i].sid }) } } //update store with data store.add(records); store.sync(); // only add to store if adding to search grid if (!print_all) { source.add({ key: payload.key, type: payload.type, description: payload.description, criteria: payload.criteria, atom: payload.atom, n: store.collect('sid').length // get length of array for unique sids }); source.sync(); } console.log('TEST STORE HERE'); test_store = Ext.getStore('TestResults'); test_store.load(); test_store.sync(); console.log(test_store); console.log(test_store.collect('sid').length) } // update grid store content Ext.StoreMgr.get('Payload').load(); Ext.ComponentQuery.query('#searchGrid')[0].getStore().load(); } 这是按属性items:Array[2886]分组的唯一项目的等效计数,最后是sid的输出,它提供了上一次运行的值:console.log(test_store.collect('sid').length) ...

0 个答案:

没有答案