1

目前我正在开发一个显示缺陷图表的应用程序。该图表将通过选择的复选框进行过滤,用户可以更改这些复选框以满足他/她的需要。这些复选框位于应用程序的齿轮菜单中的“设置”下。在 App.js 中,我有一个如下所示的函数:

getSettingsFields: function() {
    return [
        {
            xtype: 'fieldcontainer',
            fieldLabel: 'States',
            defaultType: 'checkboxfield',
            items: [
                {...}
                ...
            ]
        }
    ];
}

到目前为止,此功能运行良好,并显示了我在代码中遗漏的项目[它们对问题并不重要]。问题是现在我想将一个 ComboBox 添加到具有自定义值的同一设置页面中。该框内应包含文本 [Days, Weeks, Months, Quarters],它将进一步筛选要在图表中显示的缺陷。我尝试将 getSettingsFields 函数更改为以下内容:

getSettingsFields: function() {
    var myStore = Ext.create('Ext.data.Store', {
        fields: ['value', 'range'],
        data: [
            {'value':'day', 'range':'Days'}, //test data for ComboBox
            {'value':'week', 'range':'Weeks'}
        ]
    });

    return [
        {
            xtype: 'combobox',
            fieldLabel: 'Date Range',
            store: myStore,
            displayField: 'range',
            valueField: 'value'
        },
        {
            xtype: 'fieldcontainer',
            fieldLabel: 'States',
            defaultType: 'checkboxfield',
            items: [
                {...}
                ...
            ]
        }
    ];
}

现在,当我运行应用程序并单击“设置”按钮时,一切都消失了——甚至是复选框字段。任何解释为什么这不起作用都会非常有帮助!

4

1 回答 1

1

你基本上做的一切都是正确的——你只是偶然发现了一个非常微妙的错误。根本问题是,由于包含存储,当设置面板尝试克隆设置字段配置数组时,会发生无限递归。以下代码将解决该问题:

{
    xtype: 'rallycombobox',
    storeConfig: {
        fields: ['value', 'range'],
        data: [
            {'value':'day', 'range':'Days'}, //test data for ComboBox
            {'value':'week', 'range':'Weeks'}
        ]
    },
    storeType: 'Ext.data.Store',
    fieldLabel: 'Date Range',
    displayField: 'range',
    valueField: 'value'
}

它与您所拥有的基本相同,但使用了 rallycombobox 并传入 storeType 和 storeConfig 来解决存储克隆问题。

于 2013-07-17T19:17:10.910 回答