我正在尝试编写一些ExtJS 4脚本。我有以下代码:
var companyStoreModel = Ext.create('Ext.data.Store', {
model: 'CompanyDataModel',
proxy: {
type: 'ajax',
url: _company_load_url,
reader: 'json',
},
listeners: {
beforeload: function(store, options) {
loadFunction(0);
},
load: function(store, records, options) {
$('section#test').html('test: data loaded');
},
},
autoLoad: true,
});
在脚本的开头我有:
var _timeout;
var loadFunction = function(no)
{
$('section#test').html('test: is loading');
for (var i = 0; i<no; i++)
{
$('section#test').append('.');
}
_timeout = setTimeout(loadFunction(no++), 100);
}
所以我想向用户显示正在加载数据。数据加载良好,一切都可以在没有beforeload
事件的情况下运行。
_timeout = setTimeout(loadFunction(no++), 100);
被调用。错误是:Maximum call stack size exceeded
。有人能给我一个暗示如何做这样的事情或我做错了什么?
答案 0 :(得分:2)
现在,您的函数正在被立即执行(导致执行大量调用堆栈)。你不能把它放在这样的setTimeout
函数中。您只传递函数名称,可以评估的代码或使用匿名函数:
名称:
// You will need to put no in the global scope for this.
_timeout = setTimeout(loadFunction, 100);
评估:
_timeout = setTimeout("loadFunction("+no+")", 100);
匿名。闪光功能
_timeout = setTimeout(function() {
loadFunction(no++);
}, 100);
答案 1 :(得分:0)
加载数据时您必须clearTimeout
:
load: function(store, records, options) {
$('section#test').html('test: data loaded');
clearTimeout(_timeout);
},