How to add an empty item to ExtJS combobox?

前端 未结 6 678
慢半拍i
慢半拍i 2020-12-16 12:33

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

相关标签:
6条回答
  • 2020-12-16 12:57

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

    0 讨论(0)
  • 2020-12-16 12:59

    In Ext 4.2.1 (probably others), just add to combobox config:

    tpl : '<tpl for="."><div class="x-boundlist-item">{fullName}&nbsp;</div></tpl>'
    
    0 讨论(0)
  • 2020-12-16 13:08

    If the store uses inline data then store.load even won't fire. Maybe there is a better solution, but I ended up inserting store records on combobox.render:

    {
        xtype: 'combo',
        displayField: 'name',
        valueField: 'value',
        store: {
            type: 'MyInlineStore',
        },
        listeners: {
            render: function(el){
                el.getStore().insert(0, [{name: '[Any]', value: ''}]);
                el.setValue(''); //select [Any] by default
            }
        },
    }
    
    0 讨论(0)
  • 2020-12-16 13:18
    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>'
    
        //make sure to add this
        //if not added, empty item height is very small
        listConfig : {
            getInnerTpl: function () {
                return '<table><tr><td height="12">{fullName}</td></tr></table>';
            }
        }
    

    });

    on initializing the component, you can do this (on controller):

    populateMyComboBox([yourComboBoxComponent], true);
    

    on the populate function:

    populateMyComboBox : function(comboBox, insertEmpty) {
        var list;
        if (insertEmpty) {
            list.push({id : 0, fullName : ''});
        }
    
        var mStore = Ext.create('Ext.data.Store', {
            fields: ['data', 'label'],
            data : list.concat([real_data])
        }),
    
        comboBox.bindStore(mStore);
    }
    
    0 讨论(0)
  • 2020-12-16 13:19

    This is how we can add a blank field in Combo box

    In java Map or any other collection put key value like this

    fuelMap.put("","&nbsp;"); // we need to add "&nbsp;" not ""," " or null 
                              // because these will add a fine blank line in Combobox 
                              // which will be hardly noticeable.
    

    In js file, it should be like this :

    Listener for combo box

    listeners: {
        select: function (comp, record, index) {
            if (comp.getValue() === "" || comp.getValue() === "&nbsp;") {
                comp.setValue(null);
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-16 13:22

    You can add an "empty" record at the beginning:

     listeners: {
         load: function(store, records) {
              store.insert(0, [{
                  fullName: '&nbsp;',
                  id: null
              }]);
         }
      }
    
    0 讨论(0)
提交回复
热议问题