2012-07-19 27 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