亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

自定義ExtJS控件之下拉樹和下拉表格附源碼

2019-11-20 21:53:17
字體:
來源:轉載
供稿:網友
簡介

在Ext官方的例子中只有下拉列表控件,但是在實際業務中只有下拉列表無法滿足需求的,像下拉樹和下拉表格都是很常見的控件,對于剛使用Ext的人來說,自定義一個控件好難,其實多讀官方的源碼有些事情就不會那么難了。下面是下拉樹的代碼:
復制代碼 代碼如下:

Ext.define('ComboTreeBox',{
extend : 'Ext.form.field.ComboBox',

multiSelect : true,

createPicker : function(){
var me = this;

//創建樹控件
var picker = Ext.create('Ext.tree.Panel', {
store: me.store,
rootVisible: false,
selModel: {
mode: me.multiSelect ? 'SIMPLE' : 'SINGLE'
},
floating: true,
hidden: true,
focusOnToFront: false
});
//注冊事件用于選擇用戶選擇的值
me.mon(picker, {
itemclick: me.onItemClick,
refresh: me.onListRefresh,
scope: me
});

me.mon(picker.getSelectionModel(), {
beforeselect: me.onBeforeSelect,
beforedeselect: me.onBeforeDeselect,
selectionchange: me.onListSelectionChange,
scope: me
});
this.picker = picker;
return picker;
},

onItemClick: function(picker, record){
/*
* If we're doing single selection, the selection change events won't fire when
* clicking on the selected element. Detect it here.
*/
var me = this,
selection = me.picker.getSelectionModel().getSelection(),
valueField = me.valueField;

if (!me.multiSelect && selection.length) {
if (record.get(valueField) === selection[0].get(valueField)) {
// Make sure we also update the display value if it's only partial
me.displayTplData = [record.data];
me.setRawValue(me.getDisplayValue());
me.collapse();
}
}
}
});

下拉樹的代碼很簡單,只要集成Ext.form.field.ComboBox類,然后重寫createPicker方法就可以了,同理下拉表格也是如此,下面是下拉表格的代碼:
復制代碼 代碼如下:

Ext.define('ComboGridBox',{
extend : 'Ext.form.field.ComboBox',

multiSelect : true,

createPicker : function(){
var me = this;

var picker = Ext.create('Ext.grid.Panel', {
title : '下拉表格',
store: me.store,
frame : true,
resizable : true,
columns : [{
text : '#ID',
dataIndex : 'id'
},{
text : '名稱' ,
dataIndex : 'name'
},{
text : '描述' ,
dataIndex : 'desc'
}],
selModel: {
mode: me.multiSelect ? 'SIMPLE' : 'SINGLE'
},
floating: true,
hidden: true,
width : 300,
columnLines : true,
focusOnToFront: false
});
me.mon(picker, {
itemclick: me.onItemClick,
refresh: me.onListRefresh,
scope: me
});

me.mon(picker.getSelectionModel(), {
beforeselect: me.onBeforeSelect,
beforedeselect: me.onBeforeDeselect,
selectionchange: me.onListSelectionChange,
scope: me
});
this.picker = picker;
return picker;
},

onItemClick: function(picker, record){
/*
* If we're doing single selection, the selection change events won't fire when
* clicking on the selected element. Detect it here.
*/
var me = this,
selection = me.picker.getSelectionModel().getSelection(),
valueField = me.valueField;

if (!me.multiSelect && selection.length) {
if (record.get(valueField) === selection[0].get(valueField)) {
// Make sure we also update the display value if it's only partial
me.displayTplData = [record.data];
me.setRawValue(me.getDisplayValue());
me.collapse();
}
}
},

matchFieldWidth : false,

onListSelectionChange: function(list, selectedRecords) {
var me = this,
isMulti = me.multiSelect,
hasRecords = selectedRecords.length > 0;
// Only react to selection if it is not called from setValue, and if our list is
// expanded (ignores changes to the selection model triggered elsewhere)
if (!me.ignoreSelection && me.isExpanded) {
if (!isMulti) {
Ext.defer(me.collapse, 1, me);
}
/*
* Only set the value here if we're in multi selection mode or we have
* a selection. Otherwise setValue will be called with an empty value
* which will cause the change event to fire twice.
*/
if (isMulti || hasRecords) {
me.setValue(selectedRecords, false);
}
if (hasRecords) {
me.fireEvent('select', me, selectedRecords);
}
me.inputEl.focus();
}
console.log(me.getValue());
},

doAutoSelect: function() {
var me = this,
picker = me.picker,
lastSelected, itemNode;
if (picker && me.autoSelect && me.store.getCount() > 0) {
// Highlight the last selected item and scroll it into view
lastSelected = picker.getSelectionModel().lastSelected;
itemNode = picker.view.getNode(lastSelected || 0);
if (itemNode) {
picker.view.highlightItem(itemNode);
picker.view.el.scrollChildIntoView(itemNode, false);
}
}
}


});

下拉表格也是繼承了Ext.form.field.ComboBox這個類,重寫了createPicker方法。

開發下拉樹和下拉表格看起來so easy,只要研究透了Ext的運行機制,一切都會so easy

控件效果
 


實例下載

實例中的資源為myeclipse項目,導入即可運行,自己添加ext的js和css文件,實例中沒有ext的基礎文件。
下載地址
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品在线视频| www.欧美免费| 亚洲成人激情图| 欧美视频中文在线看| 国产69精品久久久久9| 成人欧美在线观看| 亚洲码在线观看| 国产精品日韩欧美大师| 国产精自产拍久久久久久蜜| 欧美做受高潮电影o| 茄子视频成人在线| 91色琪琪电影亚洲精品久久| 日韩黄色在线免费观看| 亚洲free嫩bbb| 欧美成人精品激情在线观看| 日韩二区三区在线| 性色av一区二区三区红粉影视| 黑丝美女久久久| 最新日韩中文字幕| 久久精视频免费在线久久完整在线看| 91夜夜揉人人捏人人添红杏| 亚洲国产精品yw在线观看| 欧美黄色免费网站| 国产精品欧美日韩久久| 综合网日日天干夜夜久久| 日韩中文字幕国产精品| 日韩高清电影免费观看完整| 亚洲精品视频网上网址在线观看| 欧美国产精品日韩| 久久伊人色综合| 久久91亚洲人成电影网站| 亚洲美女在线视频| 欧美成人h版在线观看| 4438全国成人免费| 欧美日韩在线视频观看| 亚洲人午夜精品| 精品久久久久久久久久国产| 成人免费在线视频网址| 久久在线免费观看视频| 国产成人精品最新| 国产精品视频网| 国产精品视频永久免费播放| 欧美日韩在线免费观看| 在线观看精品自拍私拍| 国产亚洲精品美女久久久久| 日韩视频免费观看| 国产精品高精视频免费| 色综合视频网站| 成人性生交大片免费看小说| 国产精品99久久久久久人| 国产精品成人久久久久| 亚洲欧美一区二区三区情侣bbw| 国产男女猛烈无遮挡91| 亚洲欧美精品suv| 精品一区精品二区| 国产精品视频最多的网站| 欧美精品一本久久男人的天堂| 免费不卡欧美自拍视频| 成人国产精品日本在线| 国产欧美精品一区二区三区-老狼| 欧美日韩一二三四五区| 97超级碰碰人国产在线观看| 日韩一区二区在线视频| 久久精品成人动漫| 国产日韩欧美中文在线播放| 亚洲精品www久久久久久广东| 欧美亚洲第一区| 日韩电影大全免费观看2023年上| 亚洲国产精品va在线观看黑人| 久久视频国产精品免费视频在线| 欧洲亚洲免费在线| 最近2019中文字幕大全第二页| 国内精品模特av私拍在线观看| 日韩成人久久久| 欧美一级免费看| 亚洲成人黄色网址| 狠狠躁夜夜躁人人躁婷婷91| 国产精品国产三级国产专播精品人| 在线丨暗呦小u女国产精品| 国产专区精品视频| 国产69精品久久久久99| 一区二区三区回区在观看免费视频| 欧美洲成人男女午夜视频| 精品一区二区三区电影| 国产精品99久久久久久人| 欧美丝袜美女中出在线| 97涩涩爰在线观看亚洲| 日韩av网址在线观看| 国内精品中文字幕| 欧美精品videosex牲欧美| 一道本无吗dⅴd在线播放一区| 色妞一区二区三区| 欧美大尺度在线观看| 久久久久北条麻妃免费看| 成人做爰www免费看视频网站| 亚洲精品ady| 亚洲欧美国产制服动漫| 欧美日韩国产精品一区二区不卡中文| 精品亚洲一区二区三区| 亚洲码在线观看| 亚洲精品自拍第一页| 中文字幕亚洲综合久久| 日本精品久久久久久久| 午夜精品一区二区三区视频免费看| 精品国产一区二区三区在线观看| 欧美午夜www高清视频| 久热精品视频在线| 中文字幕在线看视频国产欧美| 亚洲大胆人体视频| 亚洲精品一二区| 亚洲美女福利视频网站| 性日韩欧美在线视频| 国产香蕉一区二区三区在线视频| 亚州国产精品久久久| 91视频-88av| 久久亚洲精品一区二区| 国产亚洲欧美另类中文| 国产日韩欧美夫妻视频在线观看| 亚洲iv一区二区三区| 日本一区二区在线免费播放| 国产精品h在线观看| 国产精品爽爽爽| 日韩在线视频二区| 1769国产精品| 自拍偷拍免费精品| 国产精品久久在线观看| 亚洲第一视频网站| 欧美色图在线视频| 91九色蝌蚪国产| 国产精品视频在线播放| 国产日韩中文在线| 2019亚洲男人天堂| 日韩在线视频中文字幕| 国产精品香蕉国产| 久久大大胆人体| 亚洲国产精品99| 久久精品电影网| 欧美性极品xxxx做受| 精品露脸国产偷人在视频| 91视频国产精品| 成人黄在线观看| 黑人巨大精品欧美一区二区| 91精品国产91久久久久福利| 日韩av黄色在线观看| 中文字幕视频一区二区在线有码| 91视频-88av| 亚洲成人1234| 日韩在线视频导航| 亚洲男人天堂2023| 欧美最顶级丰满的aⅴ艳星| 91精品视频在线免费观看| 亚洲片av在线| 成人综合网网址| 成人有码视频在线播放| 日韩av片电影专区| 午夜精品久久久99热福利| 欧美最猛性xxxx| 午夜精品福利在线观看| 日本欧美一级片| 欧美丰满老妇厨房牲生活| 日韩精品免费在线播放| 国产精品久久久久久久美男| 久久久久久久久久婷婷| 国产精品入口夜色视频大尺度|