ExtJs之帶圖片的下拉列表框插件
更新時(shí)間:2010年03月04日 13:46:01 作者:
ExtJs是一個(gè)非常好的客戶端JavaScript,他的很多空間都可以自定義而且也可以擴(kuò)展。
在ExtJs的官方網(wǎng)站上有一個(gè)帶圖片的下拉列表,其中擴(kuò)展了ExtJs的Combo,名稱叫做IconCombox,官方地址為:
http://www.extjs.com/learn/Tutorial:Extending_Ext_Class_Chinese
但是這個(gè)IconComboBox有個(gè)缺點(diǎn),就是顯示的圖片不能按比例變化。如果圖片太大,就會出現(xiàn)覆蓋了Combobox中的字,或者出現(xiàn)Icon顯示不全種種問題,后來讀了IconComboBox的源代碼,修改了其中的問題:
在Ext.ux.IconCombo.js這個(gè)文件中:
/**
* Ext.ux.IconCombo Extension Class
*
* @author Jozef Sakalos
* @version 1.0
*
* @class Ext.ux.IconCombo
* @extends Ext.form.ComboBox
* @constructor
* @param {Object} config Configuration options
*/
Ext.ux.IconCombo = function(config) {
// call parent constructor
Ext.ux.IconCombo.superclass.constructor.call(this, config);
this.tpl = config.tpl ||
'<div class="x-combo-list-item x-icon-combo-item {'
+ this.iconClsField
+ '}">{'
+ this.displayField
+ '}</div>'
this.on({
render:{scope:this, fn:function() {
var wrap = this.el.up('div.x-form-field-wrap');
this.wrap.applyStyles({position:'relative'});
this.el.addClass('x-icon-combo-input');
this.flag = Ext.DomHelper.append(wrap, {
tag: 'div', style:'position:absolute'
});
}}
});
} // end of Ext.ux.IconCombo constructor
// extend
Ext.extend(Ext.ux.IconCombo, Ext.form.ComboBox, {
setIconCls: function() {
var rec = this.store.query(this.valueField, this.getValue()).itemAt(0);
if(rec) {
this.flag.className = 'x-icon-combo-icon ' + rec.get(this.iconClsField);
}
},
setValue: function(value) {
Ext.ux.IconCombo.superclass.setValue.call(this, value);
this.setIconCls();
}
}); // end of extend
// end of file
這個(gè)文件擴(kuò)展了Ext.form.ComboBox,其中主要包含了兩句代碼:
第17到23行,這是設(shè)置了ComboBox的顯示下拉內(nèi)容,將原來的顯示文字修改成了顯示圖片加文字,這個(gè)沒有什么問題,但是如果圖片太大,就需要修改CSS了。
第25到34行,這里設(shè)置了ComboBox中顯示的內(nèi)容方式,ExtJs使用了一個(gè)很好的方式,Ext.DomHelper.append,這個(gè)是ExtJs的一個(gè)Dom API,主要對Html的Dom進(jìn)行操作,這個(gè)代碼的意思就是使用Dom在wrap這個(gè)單元中添加一個(gè)新的標(biāo)記,這個(gè)標(biāo)記的tag是div,并且使用了position:absolute這個(gè)樣式。這就是問題出現(xiàn)的原因。對于現(xiàn)在的瀏覽器來說,對于div的背景圖片是沒有辦法修改的。于是我將其修改為img,通過這個(gè)來修改圖片的大小,這樣就可以了。具體的效果如下:
完整代碼如下 http://xiazai.jb51.net/201003/yuanma/iconcombo.rar
http://www.extjs.com/learn/Tutorial:Extending_Ext_Class_Chinese
但是這個(gè)IconComboBox有個(gè)缺點(diǎn),就是顯示的圖片不能按比例變化。如果圖片太大,就會出現(xiàn)覆蓋了Combobox中的字,或者出現(xiàn)Icon顯示不全種種問題,后來讀了IconComboBox的源代碼,修改了其中的問題:
在Ext.ux.IconCombo.js這個(gè)文件中:
復(fù)制代碼 代碼如下:
/**
* Ext.ux.IconCombo Extension Class
*
* @author Jozef Sakalos
* @version 1.0
*
* @class Ext.ux.IconCombo
* @extends Ext.form.ComboBox
* @constructor
* @param {Object} config Configuration options
*/
Ext.ux.IconCombo = function(config) {
// call parent constructor
Ext.ux.IconCombo.superclass.constructor.call(this, config);
this.tpl = config.tpl ||
'<div class="x-combo-list-item x-icon-combo-item {'
+ this.iconClsField
+ '}">{'
+ this.displayField
+ '}</div>'
this.on({
render:{scope:this, fn:function() {
var wrap = this.el.up('div.x-form-field-wrap');
this.wrap.applyStyles({position:'relative'});
this.el.addClass('x-icon-combo-input');
this.flag = Ext.DomHelper.append(wrap, {
tag: 'div', style:'position:absolute'
});
}}
});
} // end of Ext.ux.IconCombo constructor
// extend
Ext.extend(Ext.ux.IconCombo, Ext.form.ComboBox, {
setIconCls: function() {
var rec = this.store.query(this.valueField, this.getValue()).itemAt(0);
if(rec) {
this.flag.className = 'x-icon-combo-icon ' + rec.get(this.iconClsField);
}
},
setValue: function(value) {
Ext.ux.IconCombo.superclass.setValue.call(this, value);
this.setIconCls();
}
}); // end of extend
// end of file
這個(gè)文件擴(kuò)展了Ext.form.ComboBox,其中主要包含了兩句代碼:
第17到23行,這是設(shè)置了ComboBox的顯示下拉內(nèi)容,將原來的顯示文字修改成了顯示圖片加文字,這個(gè)沒有什么問題,但是如果圖片太大,就需要修改CSS了。
第25到34行,這里設(shè)置了ComboBox中顯示的內(nèi)容方式,ExtJs使用了一個(gè)很好的方式,Ext.DomHelper.append,這個(gè)是ExtJs的一個(gè)Dom API,主要對Html的Dom進(jìn)行操作,這個(gè)代碼的意思就是使用Dom在wrap這個(gè)單元中添加一個(gè)新的標(biāo)記,這個(gè)標(biāo)記的tag是div,并且使用了position:absolute這個(gè)樣式。這就是問題出現(xiàn)的原因。對于現(xiàn)在的瀏覽器來說,對于div的背景圖片是沒有辦法修改的。于是我將其修改為img,通過這個(gè)來修改圖片的大小,這樣就可以了。具體的效果如下:
完整代碼如下 http://xiazai.jb51.net/201003/yuanma/iconcombo.rar
您可能感興趣的文章:
- extjs圖表繪制之條形圖實(shí)現(xiàn)方法分析
- extjs4圖表繪制之折線圖實(shí)現(xiàn)方法分析
- Extjs grid添加一個(gè)圖片狀態(tài)或者按鈕的方法
- ExtJS[Desktop]實(shí)現(xiàn)圖標(biāo)換行示例代碼
- 解決Extjs上傳圖片無法預(yù)覽的解決方法
- ExtJs使用總結(jié)(非常詳細(xì))
- 學(xué)習(xí)ExtJS Window常用方法
- Extjs學(xué)習(xí)筆記之五 一個(gè)小細(xì)節(jié)renderTo和applyTo的區(qū)別
- Extjs中常用表單介紹與應(yīng)用
- ExtJS 簡介 讓你知道extjs是什么
- ExtJS下grid的一些屬性說明
- extjs圖形繪制之餅圖實(shí)現(xiàn)方法分析
相關(guān)文章
extjs ColumnChart設(shè)置不同的顏色實(shí)現(xiàn)代碼
extjs為ColumnChart設(shè)置不同的顏色想必有很多朋友還是比較陌生的吧,接下來為大家詳細(xì)介紹下具體設(shè)置代碼,感興趣的朋友可以參考下哈2013-05-05使用ExtJS技術(shù)實(shí)現(xiàn)的拖動樹結(jié)點(diǎn)
在本文將介紹TreePanel組件非常有意思的一個(gè)功能:結(jié)點(diǎn)拖放。要使TreePanel組件的結(jié)點(diǎn)可以拖放非常簡單,只需要將TreePanel類的enableDD選項(xiàng)參數(shù)設(shè)為true即可。當(dāng)然,要想實(shí)現(xiàn)更復(fù)雜的功能,還需要配合其他的參數(shù)和事件。2010-08-08Extjs學(xué)習(xí)過程中新手容易碰到的低級錯(cuò)誤積累
新手在學(xué)習(xí)Extjs過程中的低級錯(cuò)誤積累2010-02-02Ext4.2的Ext.grid.plugin.RowExpander無法觸發(fā)事件解決辦法
這篇文章主要介紹了Ext4.2的Ext.grid.plugin.RowExpander無法觸發(fā)事件解決辦法,本文中的事件指collapsebody和expandbody事件,需要的朋友可以參考下2014-08-08ExtJS PropertyGrid中使用Combobox選擇值問題
在PropertyGrid中使用Combobox來選擇值時(shí),得到的應(yīng)該是displayField的值,但是在確認(rèn)選擇的時(shí)候卻顯示了valueField的值2010-06-06Ext修改GridPanel數(shù)據(jù)和字體顏色、css屬性等
這篇文章主要介紹了Ext修改GridPanel數(shù)據(jù)和字體顏色、css屬性等,需要的朋友可以參考下2014-06-06Extjs3.0 checkboxGroup 動態(tài)添加item實(shí)現(xiàn)思路
Extjs3.0中的CheckboxGroup默認(rèn)不能動態(tài)添加item,如需要數(shù)據(jù)動態(tài)創(chuàng)建,試著創(chuàng)建整個(gè)CheckboxGroup,而不是動態(tài)添加item,具體實(shí)現(xiàn)如下,感興趣的朋友可以了解下2013-08-08