【问题标题】:ExtJS.data.store.load empty value outside of callbackExtJS.data.store.load 回调之外的空值
【发布时间】: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);

【问题讨论】:

    标签: javascript callback extjs4 store


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2014-05-13
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 2021-08-17
      相关资源
      最近更新 更多