Установка данных хранилища со списком extjs 6 во время выполнения приводит к ошибке отображения

У меня есть прототип поля со списком, в котором я пытаюсь установить данные хранилища во время выполнения.

Когда я пытаюсь это сделать, меню под полем со списком не отображается (или отображается настолько маленьким, что вы его не видите). Это здесь, на скрипке sencha:

Ext.define('ComboBoxRates',{
    extend: 'Ext.data.Store',
    alias: 'store.rates',
    storeId: 'ratescombo',
    fields: ['rate', 'description', 'price' ]
});

Ext.define('ComboPanel',{
    extend: 'Ext.panel.Panel',
    title: 'Test',
    renderTo: Ext.getBody(),
    items:[
        {
            xtype: 'combobox',
            editable: false,
            displayField: 'description',
            valueField: 'price',
        }
    ]    
});


Ext.application({
    name : 'Fiddle',

    launch : function() {

        var data = [
            {
                description: "$105: Standard Registration",
                price: "105",
                rate: "rate1"
            },
            {
                description: "$125: Non-Member Rate",
                price: "125",
                rate: "rate2"
            },
            {
                description: "$44: Price for SK tester",
                price: "44",
                rate: "rate3"
            },
            {
                description: "$11: Another price :O",
                price: "11",
                rate: "rate5"
            }
        ];

        var rates = Ext.create('ComboBoxRates');

        rates.setData(data);

        // Showing data is loaded into the store
        console.group('directly from store instance');
        rates.each(function (rate){
           console.log(rate.getData());
        });
        console.groupEnd();

        var panel = Ext.create('ComboPanel');


        panel.down('combobox').setStore(rates);

        // Showing that the data is definitely in the widget's store        
        console.group('from widget store');
        panel.down('combobox').getStore().each(function (rate){
           console.log(rate.getData());
        });
        console.groupEnd();



    }
});

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

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

Я также создал прототип с одним шагом назад с той же структурой, но с теми же встроенными данными. в определении магазина, и это работает:

Ext.define('ComboBoxRates',{
    extend: 'Ext.data.Store',
    alias: 'store.rates',
    storeId: 'ratescombo',
    fields: ['rate', 'description', 'price' ],
    data: [
        {
            description: "$105: Standard Registration",
            price: "105",
            rate: "rate1"
        },
        {
            description: "$125: Non-Member Rate",
            price: "125",
            rate: "rate2"
        },
        {
            description: "$44: Price for SK tester",
            price: "44",
            rate: "rate3"
        },
        {
            description: "$11: Another price :O",
            price: "11",
            rate: "rate5"
        }
    ]
});

Ext.define('ComboPanel',{
    extend: 'Ext.panel.Panel',
    title: 'Test',
    renderTo: Ext.getBody(),
    items:[
        {
            xtype: 'combobox',
            editable: false,
            displayField: 'description',
            valueField: 'price',
        }
    ]    
});


Ext.application({
    name : 'Fiddle',

    launch : function() {


        var rates = Ext.create('ComboBoxRates');

        var panel = Ext.create('ComboPanel');

        panel.down('combobox').setStore(rates);
    }
});

Я думал, что updateLayout решит проблему, но это не так.

Что-то не так с моим кодом? Есть ли способ установить значения выпадающего списка во время выполнения?


person Chris Schmitz    schedule 30.10.2015    source источник
comment
Проблема с вашим магазином. его неправильно определили. Проверьте это   -  person RED.Skull    schedule 30.10.2015
comment
Что не правильно определено в магазине?   -  person Chris Schmitz    schedule 30.10.2015
comment
Я пытался проверить ваш магазин, он показывает undefined. так только свои не данные установить не смог. проверьте, не пропустили ли вы вызов хранилища внутри Ext.application. и ставки = Ext.getStore('ComboBoxRates'); правильный синтаксис   -  person RED.Skull    schedule 30.10.2015


Ответы (1)


Вам не хватает queryMode, используйте queryMode: 'local' в комбинации.

Рабочий пример: https://fiddle.sencha.com/#fiddle/10al

person CD..    schedule 30.10.2015
comment
Я заметил, что в какой-то момент после использования комбо setStore() / setData() список рисуется правильно. Не могли бы вы объяснить, почему queryMode вызывает такую ​​проблему? - person Sergey Novikov; 26.07.2017