initialize: function() {
var store = {};
var item = {};
var me = this;
Ext.Ajax.request({
url: "some_valid_url",
success: function(response) {
try {
var parser = new DOMParser();
var xml = parser.parseFromString(response.responseText, "text/xml");
store = Ext.create('Ext.data.Store', {
autoLoad: true,
fields: ['temp', 'low', 'high', 'desc', 'icon'],
data: xml,
proxy: {
type: 'memory',
reader: {
type: 'xml',
rootProperty: 'current',
record: 'day'
}
}
});
item = Ext.create("Ext.Container", {
var bla = "hello world",
})
} catch (err) {
//err
}
}
});
}
console.log("STORE AND ITEM");
console.log(item);
console.log(store);
为什么item
和store
会回复null
个对象?
但是我可以看到它正在解析一些数据,好像我将console.log
放在store
和item
元素之间,我会得到一个有效的元素。
STORE AND ITEM
Object {} ArticleWeatherList.js:105
Object {} ArticleWeatherList.js:106
答案 0 :(得分:1)
Ajax是异步的,这基本上意味着代码继续执行而不等待请求完成。因此,当您尝试使用项目和存储时,请求尚未完成,并且设置它们的成功方法尚未运行。绕过它的唯一方法是强制请求同步发生(尽管这通常是一个坏主意)或将所有依赖于请求的代码放入成功回调或从成功回调中调用的函数。
答案 1 :(得分:-2)
由于,
您已在store
函数中声明item
和intialize
作为局部变量。如果要访问这些变量outisde,则必须在全局而不是函数中声明它们。同样可以在变量声明中省略var
关键字。
initialize: function () {
store = {};
item = {};
var me = this;
....
这应该有效但是被认为是一种不好的做法。