2012-07-19 28 views

回答

19

一般情況下,你可以使用組合框的findRecordByValue方法:

combobox.on('change', function(combobox, newValue, oldValue) { 

    // Get the old and the new records. 
    // NOTE: The underlying store is not guaranteed to 
    //  contain an associated record. 
    var oldRecord = combobox.findRecordByValue(oldValue); 
    if (oldRecord) { 
     // Do something... 
    } 

    var newRecord = combobox.findRecordByValue(newValue); 
    if (newRecord) { 
     // Do something... 
    } 
}); 
+0

有趣。我對extJS相當陌生,這裏最好的做法是什麼? – 2012-07-20 03:24:51

+1

好問題。冒着陳詞濫調的風險,這取決於你的用例。我認爲有兩件關鍵的事情需要記住。首先,'select'事件是一個UI事件,而'change'事件是一個狀態改變事件。其次,一個組合框*使用*它的存儲來促進通過UI改變其基礎字段值。結果,'select'事件將總是*對應於底層存儲中的一條記錄,但'change'事件可能不會。 – 2012-07-20 13:26:25

+0

嗯,我真的不知道哪個答案標記爲正確的,因爲,正如你所指出的,正確的答案取決於用例。 – 2012-07-20 15:36:26

6

在發佈我的問題後幾乎立即想到了這一點。

我的問題是我綁定了錯誤的事件,我正在使用「更改」而不是「選擇」。

選擇事件爲您提供其中包含的完整對象的記錄。

+5

請注意,'select'事件只被觸發,如果該值改變,因爲用戶點擊列表上的選項。如果'setValue'被編程調用,只有'change'會觸發。 – 2012-07-20 00:33:50