我想动态地将项目添加到组合框项目中。 这就是它的定义:
{
xtype: 'combobox',
id: 'tierTypeCB',
fieldLabel: 'Tiers\' type',
labelWidth: 70,
editable: false,
valueField: 'type',
displayField: 'type',
store: Ext.create('Ext.data.Store',{
fields: ['type'],
data: []
})
}
在代码的其他部分,我有这个函数应该添加项目:
onGetTiersSuccess: function(response) { // this is a 'success' function of an AJAX request
var decodedResponse = Ext.decode(response.responseText);
var tierTypeCB = Ext.getCmp('tierTypeCB');
var tierTypesStore = tierTypeCB.getStore();
for (var tierType in decodedResponse){
tierTypesStore .add({type: tierType});
}
}
问题是当下拉列表打开时它是空的。我发现的是,我的代码将数据放入组合框的商店,但是一旦组合扩展,商店就会被清空。
我使用chrome的控制台做了一些测试。我评论了'onGetTiersSuccess'功能。相反,我只需输入控制台Ext.getCmp('tierTypeCB').getStore().add({type: 'abc'})
如果我打开它的空组合框。但是,如果我第一次打开组合框(在添加该项目之前),然后才添加该项目,再次打开组合框后,我可以看到我添加的项目。
似乎在打开它之前将项目添加到组合框中,一旦打开它就会“重置”组合框的商店。
我试图通过调用Ext.getCmp('tierTypeCB').expand()
然后在添加项目之前调用Ext.getCmp('tierTypeCB').collapse()
来绕过它,但这没有帮助。
我也试过不设置我定义它的组合框的商店,但创建一个商店对象,然后将其绑定到组合框(使用bindStore()
命令),这也没有帮助。 / p>
此时我很无能,所以如果你有任何想法可以帮助我,我会很感激。
谢谢, 埃雷兹
答案 0 :(得分:6)
将queryMode
属性设置为local
。发生的事情是在您尝试扩展组合框之前不会创建空商店。默认情况下,queryMode
属性为remote
。将其设置为local
应该可以解决问题,因为它会在创建组合框时加载商店。
答案 1 :(得分:5)
您应该能够使用组合的lastQuery
配置来防止商店在首次展开时重新加载。
{
xtype: 'combobox',
lastQuery: '',
id: 'tierTypeCB',
fieldLabel: 'Tiers\' type',
labelWidth: 70,
editable: false,
valueField: 'type',
displayField: 'type',
store: Ext.create('Ext.data.Store',{
fields: ['type'],
data: []
})
}
请参阅此处的文档:http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.field.ComboBox-property-lastQuery