ExtJS: Combobox после перезагрузки магазина не установить значение - PullRequest
3 голосов
/ 23 сентября 2010

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

Ответы [ 4 ]

11 голосов
/ 23 сентября 2010

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

var val = 3;
var store = comboC.getStore();
store.on("load", function() {
   comboC.setValue(val);
}):
store.load();
6 голосов
/ 23 сентября 2010

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

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

var val = 3;
var store = comboC.getStore();
store.load({
   callback: function() {
      comboC.setValue(val);
   }
});
2 голосов
/ 13 мая 2011

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

//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);
    }
});
1 голос
/ 24 декабря 2012

В 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);
   }
});

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

...