ExtJS: Combobox после перезагрузки хранилища не устанавливает значение

Я думаю, что у меня есть очень популярная проблема, но я не нашел ответа на нее сейчас. :) У меня есть 2 похожих поля со списком - сначала я установил свое значение по идентификатору - comboT.setValue("22763");, и он правильно установил текстовое значение, связанное с этим идентификатором. Во втором выпадающем списке я сначала перезагружаю магазин (jsonstore), а затем устанавливаю значение - comboC.setValue("3"); Но этот комбо устанавливает только идентификатор, а не текстовое значение (если я открою список, я увижу, какое комбо правильно пометило текстовое значение. И после (если список просто закрыть без выбора ) текстовое значение корректно отображается при комбо.Как решить эту проблему?Спасибо.


person 0dd_b1t    schedule 23.09.2010    source источник


Ответы (4)


Что-то вроде этого, синтаксис может немного отличаться, так как я делаю это по памяти:

var val = 3;
var store = comboC.getStore();
store.on("load", function() {
   comboC.setValue(val);
}):
store.load();
person einarmagnus    schedule 23.09.2010

Загрузка хранилища является асинхронной, вы можете захотеть переместить установку нового значения в обработчик событий callback: для store.load({...}), потому что в противном случае вы устанавливаете значение до фактической загрузки хранилища.

РЕДАКТИРОВАТЬ: для полноты примера, поэтому у вас есть альтернативная версия (в некоторых случаях может быть нежелательно привязывать обратный вызов к самому хранилищу, как это сделал ormuriauga):

var val = 3;
var store = comboC.getStore();
store.load({
   callback: function() {
      comboC.setValue(val);
   }
});
person Erich Kitzmueller    schedule 23.09.2010

Еще один пример того, как установить значение поля со списком путем поиска строки в базовом хранилище данных. Я смог закодировать это, используя образцы в этих ответах в качестве основы:

//The store's data definition must have at least a data.id field defined    
set_combobox_value_from_store = function (combobox, valueField, value) {
//Get a reference to the combobox's underlying store
var store = combobox.getStore();
store.load({
    callback: function () {
        //Find item index in store
        var index = store.find(valueField, value, false);
        if (index < 0) return;
        //Get model data id
        var dataId = store.getAt(index).data.Id;
        //Set combobox value and fire OnSelect event
        combobox.setValueAndFireSelect(dataId);
    }
});
person camilo    schedule 12.05.2011

В extjs 4.1 похоже, что combo.setValue() работает, когда тип valueField в модели — «строка». это был мой код

Ext.define('Model.CboObras', {
               extend: 'Ext.data.Model',
                idProperty: 'co_obra',
                fields: [{
                    name: 'co_obra',
                    type: 'int'
                }, {
                    name: 'nb_obra',
                    type: 'string'
                }]
            });

это не работает.

Когда я изменил свой код на это:

   Ext.define('Model.CboObras', {
      extend: 'Ext.data.Model',
      idProperty: 'co_obra',
      fields: [{
         name: 'co_obra',
             type: 'string'
          }, {
             name: 'nb_obra',
            type: 'string'
         }]
   });

После этого я использую это:

    var store = comboC.getStore();
    store.load({
   callback: function() {
      comboC.setValue(val);
   }
});

теперь это работает как шарм!

person Kevin Angulo    schedule 24.12.2012