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 回调之外的空值的主要内容,如果未能解决你的问题,请参考以下文章