我想将项目动态添加到组合框项目。这是它的定义方式:
{
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()
命令),但这也无济于事。
在这一点上我一无所知,所以如果你有任何可能对我有帮助的想法,我将不胜感激。
谢谢, 雷兹