ExtJS.data.store.load 回调之外的空值

Posted

技术标签:

【中文标题】ExtJS.data.store.load 回调之外的空值【英文标题】:ExtJS.data.store.load empty value outside of callback 【发布时间】:2014-08-06 14:07:38 【问题描述】:

你能帮我看看下面的代码吗?为什么我无法在回调之外获取值?

任何 cmets 将不胜感激。

var i = 0;
        var myModulesName = []; 
        me.store.load(callback: function()
                me.store.data.each(function(records)  
                        if(records.raw.hasLeaf === true)
                            //Ext.Function.defer(function() 
                                myModulesName[i] = records.raw.name;
                                console.log('this is constructor App.js  inside storeload  '+myModulesName[i]);
                            //, 100, me);
                            ++i;
                        
                );

            
        );
        //empty here.
        console.log('this is constructor outside of load    '+myModulesName);

【问题讨论】:

【参考方案1】:

是的,它是空的,并且它将保持为空,因为 store.load() 是异步的。请求被发送到服务器并立即继续执行。当服务器返回响应(可能需要几秒钟)时,回调被执行,如果请求成功,则触发 load 事件。

【讨论】:

谢谢你,萨基!我怎么能在加载回调之外获得 myModulesName?我什至尝试在我的商店定义中设置 async:false,但没有任何改变。 我不知道最终结果应该是什么。如果您只想要从服务器接收的一组值,您可能根本不需要存储。商店是为网格、树、组合过滤、排序等提供数据源。如果您不需要,只需发送Ext.Ajax.request,解码结果即可。 我确实需要为我的树状菜单过滤、排序。恐怕我必须弄清楚。有人说在另一个线程的 getJSON 函数中使用 callback.call。它不适用于 store.load。 我不知道你期待什么。存储加载是异步的,因此您需要将所有需要来自服务器的数据的处理放在成功回调中。 谢谢萨基。我需要在加载过程中将数据传递给变量,成功后我可以在加载之外获取数据。【参考方案2】:

这段代码位于构造函数中,我还有另一个名为 init() 的函数,它将在构造函数之后触发。下面的代码在我的构造函数的末尾。

    if (Ext.isReady) 
            Ext.Function.defer(me.init, 10, me);
         else 
            Ext.onReady(me.init, me);

我只是将这部分移入 load() 并在“每个”部分的末尾,它起作用了!我现在可以获取 modulesName。

【讨论】:

以上是关于ExtJS.data.store.load 回调之外的空值的主要内容,如果未能解决你的问题,请参考以下文章

Java之异步回调

JavaScript系列之回调函数callback

jQuery之回调对象

设计模式之回调机制

C语言函数指针之回调函数

replace之正则和回调函数