0
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对象?storenull

但是我可以看到它正在解析一些数据,就好像我console.log在元素之间store放入item我会得到一个有效的元素。

STORE AND ITEM 
Object {} ArticleWeatherList.js:105
Object {} ArticleWeatherList.js:106
4

2 回答 2

1

Ajax 是异步的,这基本上意味着代码继续执行而不等待请求完成。因此,当您尝试使用 item 和 store 时,请求尚未完成,设置它们的成功方法尚未运行。解决此问题的唯一方法是强制请求同步发生(尽管这通常是一个坏主意)或将所有依赖于请求的代码放入成功回调或从成功回调中调用的函数中。

于 2013-05-15T10:44:29.957 回答
-2

因为,你已经在函数内部声明了storeitem作为局部变量intialize。如果你想访问这些变量,你必须在全局而不是在函数中声明它们。省略var变量声明中的关键字也可以达到同样的效果。

initialize: function () {
        store = {};
        item = {};
        var me = this;
        ....

这应该有效,但被认为是一种不好的做法。

于 2013-05-15T10:40:30.467 回答