2011-09-19 101 views
1

我正在嘗試編寫一些ExtJS 4腳本。我有以下代碼:beforeOoad事件中的超時時間

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

眼下,正在執行的功能馬上(導致執行的一個巨大的調用堆棧)。你不能把它放在這樣的setTimeout函數中。你要麼只傳遞函數名,可以eval'd代碼,或者您可以使用匿名函數:

名稱:

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

評估和演示:

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

匿名。 FUNC。

_timeout = setTimeout(function() { 
    loadFunction(no++); 
}, 100); 
+0

它的工作!這非常有趣,似乎我的javascript知識還很低。 :) 謝謝! – freakish

0

加載數據之時你必須clearTimeout

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

我忘了clearTimeout,但那不是重點。根本沒有效果,在你的情況下,加載永遠不會停止。 – freakish