javascript - 在运行时设置 extjs 6 组合框的存储数据会导致显示错误

标签 javascript extjs combobox extjs6-classic

我有一个组合框的原型(prototype),我试图在运行时设置存储数据。

当我尝试执行此操作时,组合框下的菜单不会呈现(或者它呈现得非常小,您实际上无法看到它)。这是here on sencha fiddle :

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();



    }
});

我知道数据已加载到组合框的存储中(在 fiddle 中打开控制台日志),所以我不确定为什么它无法正确呈现。

我知道这在这种情况下看起来很愚蠢,但原型(prototype)是从网格的小部件列中提取的逻辑,其中每行都有不同的存储数据。

我还构建了一个one-step-back prototype具有相同的结构,但相同的数据内联在商店的定义中并且有效:

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 可以解决该问题,但事实并非如此。

我的代码有问题吗?有没有某种方法可以在运行时设置组合框的值?

最佳答案

您缺少queryMode ,在组合中使用 queryMode: 'local'

工作示例:https://fiddle.sencha.com/#fiddle/10al

关于javascript - 在运行时设置 extjs 6 组合框的存储数据会导致显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426987/

相关文章:

javascript - 传单不连贯地绘制瓷砖

javascript - 从 ExtJS 4 中的自定义模型类扩展

json - extJS:读取嵌套的 JSON

excel - 在代码中添加多个组合框

javascript - 将特定于区域的日期格式设置为 dd-MMM-yyyy?

javascript - 如何在不同按钮之间交替颜色?

javascript - 使用 javascript 移动 Div 框

javascript - 如何在 Ext JS 文本字段标签中用星号标记必填字段

javascript - 使用 Ext.js 4.2 选择一个已经选择的树节点(重新选择)

c# - 在 DropDownList 中显示多个值并以编程方式访问这些值