目前我正在开发一个显示缺陷图表的应用程序。该图表将通过选择的复选框进行过滤,用户可以根据自己的需要进行更改。这些复选框位于应用程序的齿轮菜单中,位于“设置”下。在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: [
{...}
...
]
}
];
}
现在,当我运行应用程序并单击“设置”按钮时,一切都消失了 - 甚至是复选框的字段。任何解释为什么这不起作用将是非常有帮助的!
答案 0 :(得分: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以解决商店克隆问题。