Search code examples
extjscomboboxextjs4extjs3extjs-stores

How to add an empty item to ExtJS combobox?


I want to add and empty item (display value is blank, item height is kept as normal) to an Ext.form.ComboBox. I refered 2 links below to configure my combobox, but it still not display the empty item:

Here is my code:

this.abcCombo = new Ext.form.ComboBox({
    name : 'abcCombo',
    hiddenName : 'abcCombo-id',
    fieldLabel : "My Combobox",
    width : 250,
    editable : false,
    forceSelection : true,
    mode : 'local',
    triggerAction : 'all',
    valueField : 'id',
    displayField : 'fullName',
    store : new Ext.data.JsonStore({
        fields : ['id', 'fullName']
    }),
    tpl : '<tpl for="."><div class="x-combo-list-item">{fullName}&nbsp;</div></tpl>'
});

The combobox store's data will be loaded after an Ajax request (i.e 3 items in data items). And the combobox has only 3 item (not 4 as I expected). Do you have any idea about my problem?! Thank you so much!


Solution

  • Since your adding the combobox values later, why not just initialize the store with one blank value:

    store : new Ext.data.JsonStore({
        fields : ['id', 'fullName'],
        data : [{id: 0, fullName: ''}]
    }),
    

    Later when you do store.add(theRestOfThem), that blank one will still be there.

    Had to revisit this today (15 Apr 2017) for ExtJS 4.2:

    The easiest way is to include an empty string in the store as above, it can also be done with a load listener on the store:

    listeners: 
    {
        load: function(store, records) 
        {
            store.insert(0, [{
                fullName: '',
                id: null
            }]);
        }
    }
    

    Then add a tpl config to the combobox with &nbsp; after the display field:

    tpl: '<tpl for="."><div class="x-boundlist-item">{fullName}&nbsp;</div></tpl>',
    

    (the display field is fullName in the OPs case)