无法从 ExtJs 的回调中修改变量
Posted
技术标签:
【中文标题】无法从 ExtJs 的回调中修改变量【英文标题】:Unable to modify variable from within callback in ExtJs 【发布时间】:2016-03-27 15:37:15 【问题描述】:如何在回调中在下面的代码中修改变量“updated”的值。
为什么变量 'updated' 没有以下列方式被修改(即每次调用函数时它都返回 false)?
updateData:function()
var updated = false;
var store = new Ext.getStore('MyStore');
store.load(
scope: this,
callback: function(records, operation, success)
if(/*some condition*/)
updated=true;
);
return updated ;
【问题讨论】:
我猜这个函数每次都返回false,因为store.load()
(我假设你使用远程代理)是异步调用,你只需定义update
变量,调用load
并返回update
多变的。所以商店还没有加载,update
仍然是假的。
@SergeyNovikov 是的,你说得对,我正在使用远程代理
好吧,我描述了你的代码示例是如何工作的。 updated
变量更改为 true,但是当 callback
函数被触发时。
@SergeyNovikov 如何从上面的代码中返回 true,因为它仍然返回 false
你不能。在函数返回时,尚未触发回调。您可以使用调试器查看此行为。
【参考方案1】:
不确定你想用这段代码实现什么,但由于store.load()
是异步的(我假设你使用像ajax 之类的远程代理),所以当你返回updated
时不会加载存储,所以它仍然是错误的。
如果您只想在商店加载时执行某些操作,您可以在 callback
匿名函数中执行此操作(或将回调函数传递给您的 updateData
函数并在 callback
中调用它?)。
如果您想检查商店是否已加载,您可以为 ExtJS 5+ 调用 isLoaded()
或为 ExtJS 4 检查商店 lastOptions
属性(如果存在,则您的商店至少加载了一次)属性。
我没有看到您的updateData
函数的足够解决方案返回 true。
【讨论】:
以上是关于无法从 ExtJs 的回调中修改变量的主要内容,如果未能解决你的问题,请参考以下文章