扩展数据动态加载后,EXT-JS组合框的存储重置

时间:2013-07-31 14:02:25

标签: javascript extjs combobox

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

{
      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>

此时我很无能,所以如果你有任何想法可以帮助我,我会很感激。

谢谢, 埃雷兹

2 个答案:

答案 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