Based on the ExtJS-Tutorial on how to build a combo box with an icon, I built a component that can be used as a country selector in ExtJS.
Here you can find the code of the component:
Ext.ns('Extreme.components');
Extreme.components.CountryCombo = Ext.extend(Ext.form.ComboBox, {
constructor: function(config){
var data;
if (config.phoneLabels) {
data = [['+49', '+49', 'ux-flag-de'], ['+43', '+43', 'ux-flag-at'], ['+41', '+41', 'ux-flag-ch'], ['+352', '+352', 'ux-flag-lu'], ['+432', '+432', 'ux-flag-li']];
}
else {
data = [['DE', 'Deutschland', 'ux-flag-de'], ['AT', 'Österreich', 'ux-flag-at'], ['CH', 'Schweiz', 'ux-flag-ch'], ['LU', 'Luxemburg', 'ux-flag-lu'], ['LI', 'Lichtenstein', 'ux-flag-li']];
}
Extreme.components.CountryCombo.superclass.constructor.call(this, Ext.apply({
store: new Ext.data.SimpleStore({
fields: ['countryCode', 'countryName', 'countryFlag'],
data: data
}),
plugins: new Ext.ux.plugins.IconCombo(),
valueField: 'countryCode',
displayField: 'countryName',
iconClsField: 'countryFlag',
triggerAction: 'all',
mode: 'local'
}, config));
}
});
Ext.reg('countrycombo', Extreme.components.CountryCombo);
It’s basically just a ComboBox
using the IconCombo
plugin with a predefined Store
. The Store
is in fact a SimpleStore
which contains the country codes, labels and css classes for the icons for each country.
(If you wonder about the Extreme
namespace, I am right now building a little component library for ExtJS).
The country selector is registered under the xtype of ‘countrycombo’. So here’s a small example of how to use it:
Ext.onReady(function(){
var form = new Ext.FormPanel({
items: [{
xtype: 'countrycombo',
fieldLabel: 'Country',
name: 'country',
anchor: '100%'
}],
frame: true,
style: 'padding: 10px;',
width: 250,
labelWidth: 50
});
var element = Ext.query('script[src$=country-combo.js]')[0];
var renderElement = element.parentNode;
form.render(renderElement);
});
Thanks go also to FamFamFam where i retrieved the flag images.
Update: You can find this code and all my other ExtJS components bundled in a library called ’extensive’. Enjoy the code and feel free to support the project by participating.