我正在尝试编写一些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。有人可以给我提示如何做这种事情还是我做错了什么?

最佳答案

现在,您的函数将立即执行(导致大量的执行调用栈)。您不能像这样将其放在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);

09-28 08:26