Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   combobox: не работает setValue (https://javascript.ru/forum/extjs/65276-combobox-ne-rabotaet-setvalue.html)

potkin 09.10.2016 19:28

combobox: не работает setValue
 
Юзаю: ExtJS 6.01 и 6.2 GPL
Проблема: не могу combobox-у присвоить значение. Получаю ошибку (в консоле видно): Uncaught TypeError: Cannot read property 'get' of undefined(…)
Часть кода:
{
   xtype: 'combobox',
   allowBlank: true, width: 75,
   valueField: "TableID",
   hiddenName: "TableID",
   displayField: "TableName",
   name: "TableID", itemId: "TableID", id: "TableID"
   },

Гружу данные в стор
var varStoreTablesGrid = Ext.create("store.storeTablesGrid"); varStoreTablesGrid.setData([], false); varStoreTablesGrid.proxy.url = "...";
varStoreTablesGrid.load({ waitMsg: lanLoading });
varStoreTablesGrid.on('load', function () {
   Ext.getCmp("TableID").store = varStoreTablesGrid;
});

Ну и хочу присвоить КомбоБоксу значение:
var combo = Ext.getCmp('TableID');
//combo.setRawValue("2016"); - это работает
combo.setValue(1); //это не работает, получаю ошибку в консоли: Uncaught TypeError: Cannot read property 'get' of undefined(…)


Подскажите в чём может быть проблема?

potkin 09.10.2016 19:41

Но когда стор локальный в виде переменно, то тогда всё ок.
{
   xtype: 'combobox',
   allowBlank: true, width: 75,
   valueField: "TableID",
   hiddenName: "TableID",
   displayField: "TableName",
   name: "TableID", itemId: "TableID", id: "TableID",


   store: new Ext.data.SimpleStore({
      fields: ["TableID", "TableName"],
      data: Table_values
   }),
},

Где Table_values
var DirHarvestYear_values = [
    [1, 'Запись-1'],
    [2, 'Запись-2'],
    [3, 'Запись-3'],
    [4, 'Запись-4']
];


То ошибок нет, можно применять к КомбоБоксу метод:
Ext.getCmp('TableID').setValue(1);

Infarch 10.10.2016 10:31

Вместо
Ext.getCmp("TableID").store = varStoreTablesGrid;
попробуйте
Ext.getCmp("TableID").setStore( varStoreTablesGrid );

nohuhu 12.10.2016 01:28

Чем каноничный вариант не устраивает?

Ext.define('MyApp.store.TableGrid', {
    extend: 'Ext.data.Store',
    alias: 'store.TablesGrid',

    fields: ['TableID', 'TableName'],

    proxy: {
        url: '...'
    }
});

...

{
   xtype: 'combobox',
   allowBlank: true,
   width: 75,
   valueField: "TableID",
   hiddenName: "TableID",
   displayField: "TableName",
   name: "TableID",
   itemId: "TableID",
   id: "TableID",

   store: {
      type: 'TablesGrid'
   }
}

...

Ext.getCmp('TableID').getStore().load();

potkin 12.10.2016 17:24

nohuhu,
А как присвоить значение:
Ext.getCmp('TableID').setValue(1);

nohuhu 12.10.2016 21:19

Цитата:

Сообщение от potkin (Сообщение 431461)
nohuhu,
А как присвоить значение:
Ext.getCmp('TableID').setValue(1);

Вам начальное значение нужно присвоить? Передайте его в параметрах поля:

{
    xtype: 'combobox',
    valueField: 'TableID',
    value: 1,
    ...
}

potkin 13.10.2016 10:00

Оно наперёд не известно.
Я его загружаю с сервера.

kolka 19.10.2016 12:45

Может тогда через ViewModel - ?
Как только загрузили сторе, присвойте значение во ViewModel.
Что то типа
//ViewModel
data : {
    defval: 0
}

//combo
bind: {
    value: '{defval}'
}

//controller
this.getViewModel().set({
    defval: 'значение из загруженного стор'
})


Часовой пояс GMT +3, время: 01:52.