3

我想将项目动态添加到组合框项目。这是它的定义方式:

{
      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()命令),但这也无济于事。

在这一点上我一无所知,所以如果你有任何可能对我有帮助的想法,我将不胜感激。

谢谢, 雷兹

4

2 回答 2

7

您应该能够使用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

于 2013-07-31T14:10:06.780 回答
6

queryMode属性设置为local。正在发生的事情是在您尝试扩展组合框之前不会创建空商店。queryMode默认情况下,该属性为remote. 将其设置为local应该可以解决问题,因为它会在创建组合框时加载商店。

于 2013-07-31T14:12:30.390 回答