4

我有一个商店,我需要在商店加载后加载并对代码内的记录执行操作。但是由于执行是异步的,存储加载之后的语句甚至在存储完全完成加载之前就被执行了。

如何在商店完成加载之前暂停执行。

下面是代码:

var fieldsStore = new Ext.create('Ext.data.Store', {
model : 'FieldsModel',
proxy : {
    type : 'ajax',
    url : 'queryBuilder_getQueryDetails',
    extraParams : {
        queryID : queryID
    },
    reader : {
        type : 'json'
    }
},
listeners : {
    load : function(store, records, successful, operation, eOpts) {
        if (successful) {
            records.forEach(function(rec) {
                // default settings: if datatype is INTEGER - SUM
                if (rec.get('fieldType') == 'INTEGER') {
                    rec.set('fieldSettingKey', 'SUM');
                    rec.set('fieldSettingValue', 'Sum');
                } else {
                    // else select ROWHEADER by default
                    rec.set('fieldSettingKey', 'ROWHEADER');
                    rec.set('fieldSettingValue', 'Row Header');
                }

            });

            store.commitChanges();
        }
    }
}
});

function loadPivotDefinition(pivotDef) {
// load query in combo
Ext.getCmp('queryListCombo').select(pivotDef.get('queryID'));
// set params as the query id to fetch fields
fieldsStore.proxy.extraParams.queryID = pivotDef.get('queryID');
// load fields store
fieldsStore.load();

 // THIS IS WHERE I WANT TO CODE TO HALT AND CHECK IF THE STORE HAS COMPLETED LOADING.
// load field data (checked, data binding )
debugger;
pivotDef.get('rowHeaders').forEach(
        function(rowRecord) {
            var storeRecord = fieldsStore.findRecord('fieldName',
                    rowRecord.fieldName, 0, false, true, true);
            storeRecord.set('checked', rowRecord.checked);
            storeRecord.set('fieldSettingKey', rowRecord.fieldSettingKey);
            storeRecord.set('fieldSettingValue',
                    rowRecord.fieldSettingValue);
        });
}
4

2 回答 2

3

store.load可以将回调作为参数:

fieldsStore.load(function() {
    // THIS IS WHERE I WANT TO CODE TO HALT AND CHECK IF THE STORE HAS COMPLETED LOADING.
    // load field data (checked, data binding )
    debugger;
    pivotDef.get('rowHeaders').forEach(/*...*/);
});

当您将回调作为参数传递时,回调正在加载数据后立即执行。

于 2013-05-17T09:46:29.787 回答
1

在某些操作上,使用以下方式加载商店:

 Ext.getStore('store').load({
 params:  {
      /* parameters to pass*/
    },
 callback : function(records, operation, success) {
       /* perform operations on the records*/
         console.log(records); 
    }
});
于 2013-05-17T11:51:10.043 回答