我有这个类从服务器自动生成JSON存储。商店是动态创建的,可以在Firebug的DOM中查看。 我想我有一些范围问题。当我想在Ext.Ajax.request的回调函数中调用console.log(Ext.getStore('AdminSettings'))(其中AdminSettings是创建的商店之一)时,'AdminSettings'商店返回,但如果我把console.log(Ext.getStore('AdminSettings'))放在回调函数外的任何地方,我在firebug中得到未定义的消息,我的商店没有实例化。 请参阅代码注释以查看其实际操作。
Ext.Ajax.request({
url : './account/getadminstores',
callback : function(options, success, response) {
var json = Ext.decode(response.responseText);
var adminStores = new Array();
// setup and intitialize on the fly stores
for ( var key1 in json) {
var storeFields = new Array();
for ( var key2 in json[key1]) {// if (i==1){break;}
for ( var key3 in json[key1][key2]) {
storeFields.push(key3);}
break;};
Ext.define('MA.store.' + key1, {
extend : 'Ext.data.Store',
fields : storeFields,
storeId : key1,
data : json[key1]
});
Ext.create('MA.store.'+key1);};
console.log(Ext.getStore('AdminSettings'));
//returns MA.store.AdminSettings in firebug and everything is fine
}
});//eof Ext.Ajax.request
console.log(Ext.getStore('AdminSettings'));
//returns undefined which is strange
答案 0 :(得分:1)
Ext.Ajax.request是异步的。您的最终console.log调用什么都不返回,因为在执行它时请求尚未完成。取决于请求回调结果的任何代码也需要由回调执行。
答案 1 :(得分:1)
这是由于javascript的异步性质,callback
直到ajax请求完成后才被调用,因此Ext数据存储也没有被定义。
脚本的执行顺序是: