2015-01-20 60 views
0

我目前正在測試我開發的AS£/ Flash應用程序,並且遇到此問題。我在舞臺上的國家,地區和城市有三個組合,它們都是通過PHP的mySQL數據庫中的數據填充的。一切都很順利......或者我想。檢測何時在不使用更改事件的情況下在組合框中進行選擇

當框架加載時,只填充國家組合。一旦進行了選擇,就會發生CHANGE事件,觸發該地區組合的人口,進而在選擇後進行城市組合填充。我的問題是,如果用戶選擇一個國家,然後改變他們的想法並選擇另一個國家,並且重複這個過程,那麼會在每次用戶改變主意時觸發CHANGE事件。敲門效應是,當他們真正選擇城市時,數據庫將接收來自先前選擇的請求。

有沒有辦法繞過這個......?有一個事件監聽器在選擇而不是改變也許..?我已經沖刷網頁卻發現沒有什麼幫助...

幫助,將不勝感激和熱情接待..

+0

@ seand,@ kamal,謝謝你的建議。我以爲我錯過了一些顯而易見的事情,但通過你的回答它似乎沒有。計時器選項增加了我寧願避免的額外的強制性層。所以,根據kamal的建議,我選擇在選擇後禁用組合。這樣我就避免了用一行代碼多次調用數據庫......再次感謝您的幫助。我會將kamels的答案標記爲選定的答案,因爲它讓我得出了我的最終結論...... – Filious 2015-01-21 10:20:19

回答

0

最好避免用戶停止選擇另一個國家,直到該特定國家的地區獲得加載。如同有一些加載器或進度條。

1

嘗試在改變事件處理程序使用定時器。每次更改事件處理程序觸發停止並重新啓動計時器。最後在某個時刻,你將有一個計時器完成,因爲沒有更多的變化正在發生。當計時器完成後,請提出您的要求。

var _delay:int = 1000; // 1 second delay 
var _t:Timer = new Timer(_delay, 1); 
_t.addEventListener(TimerEvent.TIMER_COMPLETE, timerHandler); 
var _comboBox:ComboBox = new ComboBox(); 
_comboBox.addEventListener(Event.CHANGE, changeHandler); 

function changeHandler(event:Event):void 
{ 
    if(_t.running) 
    _t.stop(); 
    _t.start(); 
} 

function timerHandler(event:TimerHandler):void 
{ 
    // make call to fetch data 
} 

另一種解決方案是將響應存儲在Dictionary對象中,並在每次觸發change事件時檢查Dictionary。這將最大限度地減少對服務器的請求。

相關問題