timeOut in beforeLoad事件

时间:2011-09-19 09:15:43

标签: javascript jquery extjs asynchronous load

我正在尝试编写一些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事件的情况下运行。

时,此代码给出了jQuery错误
_timeout = setTimeout(loadFunction(no++), 100);

被调用。错误是:Maximum call stack size exceeded。有人能给我一个暗示如何做这样的事情或我做错了什么?

2 个答案:

答案 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);
              },