Иногда появляется идентификатор, потому что в вашем коде условие гонки . Фактически, если хранилище было загружено, оно покажет отображаемое значение, в противном случае просто идентификатор.
Я проверил это в своем собственном коде. Хранилище загружается намного быстрее, чем вызов Ajax для получения значения инициализации (потому что я записал в память первый вызов). Поскольку хранилище было загружено первым, вызов setValue () с идентификатором работал отлично.
Однако, когда я попытался намеренно замедлить загрузку Ajax-вызова из магазина, показывался только идентификатор, а не отображаемое значение. Итак, я видел ответы, говорящие, что для решения этой проблемы вы должны использовать autoLoad: true в ComboBox. Использование автозагрузки нормально, но недостаточно. Вы хотите быть уверены, что при установке значения хранилище уже загружено. Для этого просто поместите слушатель в событие загрузки магазина:
var dataStore = new Ext.data.JSonStore({
url: 'your-url',
root: 'records',
fields: ['id', 'name'],
autoLoad: true,
listeners: {
load: function () {
app.initForm(); //here the name of the function setting form values
}
});
С этим событием все отлично работает в обоих случаях.
Чтобы предотвратить перезагрузку данных, когда ComboBox запускает новое событие load () после первого запуска, я проверяю, установлено ли значение в app.initForm ()
app.initForm = function () {
var customerField = Ext.getCmp('formName').getForm().findField('idCustomer');
if (customerField.getValue !== '') {
return; //skipping init, form already filled
}
//Ajax Call here
};