Как получить dispayfield в extjs combo?

#extjs

#extjs

Вопрос:

В extjs combobox у нас есть valueField, displayField . Есть один, getValue(). но его нет getDisaplay(). , Так как же записать имя поля dispay?

Ответ №1:

Как насчет метода getRawValue?

 Ext.getCmp('combo').getRawValue();
  

Комментарии:

1. это ответ

Ответ №2:

Используйте значение, чтобы извлечь запись из хранилища, и получите отображаемое значение оттуда.

Абстрактно вы можете использовать этот код, но вы могли бы заменить некоторые переменные известными значениями, чтобы сделать его более читаемым:

 getComboDisplay = function(combo) {
    var value = combo.getValue();
    var valueField = combo.valueField;
    var record;
    combo.getStore().each(function(r){
        if(r.data[valueField] == value){
            record = r;
            return false;
        }
    });

    return record ? record.get(combo.displayField) : null;
}
  

Комментарии:

1. OP должен принять ответ от @Dasha_Salo, он проще моего и, похоже, работает так же.

2. этот ответ слишком сложный. OP, пожалуйста, проверьте ответ @Dasha

Ответ №3:

простое решение, которое работает для меня :

 comboselect: function (combo,record) {
    alert(combo.rawValue);
}
  

надеюсь, это поможет вам

Ответ №4:

В ExtJS 4 есть встроенный findRecord() метод, который выполняет поиск, предложенный BigSean выше, поэтому вам не нужно писать весь этот код:

 
Ext.override(Ext.form.field.ComboBox, {
    getDisplayedValue: function() {     // getDisplayValue() already exists but is a private method
        var me = this,
            value = me.value,
            record = null;
        if(value) {
            record = me.getStore().findRecord(me.valueField, value);
        }
        if(record) {
            return record.get(me.displayField);
        }
        return null;
    }
});