timeOut в событии beforeLoad - PullRequest
       11

timeOut в событии beforeLoad

1 голос
/ 19 сентября 2011

Я пытаюсь написать какой-нибудь скрипт 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 ]

2 голосов
/ 19 сентября 2011

Прямо сейчас, ваша функция выполняется сразу же (вызывая огромный стек вызовов выполнений). Вы не можете поместить это в функцию setTimeout таким образом. Вы либо передаёте ТОЛЬКО имя функции, код, который может быть eval'd, либо используете анонимную функцию:

Имя:

// You will need to put no in the global scope for this.
_timeout = setTimeout(loadFunction, 100); 

Eval:

_timeout = setTimeout("loadFunction("+no+")", 100); 

Anon. FUNC.

_timeout = setTimeout(function() {
    loadFunction(no++);
}, 100);
0 голосов
/ 19 сентября 2011

Вы должны clearTimeout при загрузке данных:

        load: function(store, records, options) {
                  $('section#test').html('test: data loaded');
                  clearTimeout(_timeout);
              },
...