社区
Web 开发
帖子详情
extjs4下拉列树如何实现?急急急。。。求能用的实例
zhenchuang99
2012-08-28 04:24:03
extjs4下拉列树如何实现?
...全文
362
13
打赏
收藏
extjs4下拉列树如何实现?急急急。。。求能用的实例
extjs4下拉列树如何实现?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
matengyu036912
2013-11-26
打赏
举报
回复
兄弟,我试了试,节点展开后再折叠就出毛病了!
zhenchuang99
2012-09-10
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
楼上的能否说的清楚点,怎样取得id隐藏值,方便的话贴下成功实现的代码,谢谢!
[/Quote]
comboboxtree.js
Ext.define("Ext.ux.comboboxtree", {
extend : "Ext.form.field.Picker",
requires : ["Ext.tree.Panel"],
initComponent : function() {
var self = this;
Ext.apply(self, {
fieldLabel : self.fieldLabel,
labelWidth : self.labelWidth
});
self.callParent();
},
createPicker : function() {
var self = this;
var store = self.store;
self.picker = new Ext.tree.Panel({
height : 220,
autoScroll : true,
floating : true,
focusOnToFront : false,
shadow : true,
ownerCt : this.ownerCt,
useArrows : true,
store : store,
rootVisible : false
});
return self.picker;
},
alignPicker : function() {
var me = this, picker, isAbove, aboveSfx = '-above';
if (this.isExpanded) {
picker = me.getPicker();
if (me.matchFieldWidth) {
picker.setWidth(me.bodyEl.getWidth());
}
if (picker.isFloating()) {
picker.alignTo(me.inputEl, "", me.pickerOffset);// ""->tl
isAbove = picker.el.getY() < me.inputEl.getY();
me.bodyEl[isAbove ? 'addCls' : 'removeCls'](me.openCls
+ aboveSfx);
picker.el[isAbove ? 'addCls' : 'removeCls'](picker.baseCls
+ aboveSfx);
}
}
}
});
jsp页面代码:
var comboIds='<s:property value="trainTypeId"/>';;
var comboValues='<s:property value="trainTypeName"/>';
Ext.onReady(function() {
Ext.Loader.setConfig({enabled:true});
Ext.Loader.setPath('Ext.ux', './js');
var trainTypeTree =Ext.create("Ext.ux.comboboxtree", {
id:'trainTypeTree',
name:'name',
store:Ext.create('Ext.data.TreeStore', {
fields: ['id','text','checked',"keyword","leaf"],
proxy : {
type : 'ajax',
url : "getTrainTypeTree.action",
extraParams:{
//name:"check",
//keyword:"tips",
//id:'<s:property value="id"/>'
}
},
root : {
id : '0',
text : '根'
},
nodeParam : 'node'
}),
hiddenName:'hiddenName',
hiddenField:'hidden_ids',
width : 155,
allowBlank:false,
editable:false,
renderTo : 'gwypx_addpx_pxlx'
});
trainTypeTree.getPicker().on("checkchange",function(theNode,checked,options){
if (checked) {
comboIds = comboIds + "," + theNode.get("id");
comboValues = comboValues + "," + theNode.get("text");
} else {
var idArray = new Array();
var idstmp = ""
if (comboIds.length > 0) {
idstmp = comboIds.substring(1);
}
idArray = idstmp.split(',');
for(var j=0;j<idArray.length;j++){
if (theNode.get("id") == idArray[j]) {
idArray[j]="X";
break;
}
}
comboIds = "";
for(var k=0;k<idArray.length;k++){
if (idArray[k]!="X") {
comboIds = comboIds+","+idArray[k];
}
}
var valueArray = new Array();
var valuetmp = ""
if (comboValues.length > 0) {
valuetmp = comboValues.substring(1);
}
valueArray = valuetmp.split(',');
for(var j=0;j<valueArray.length;j++){
if (theNode.get("text") == valueArray[j]) {
valueArray[j]="";
break;
}
}
comboValues = "";
for(var k=0;k<valueArray.length;k++){
if (valueArray[k]!="") {
comboValues = comboValues+","+valueArray[k];
}
}
}
var checkedNodes =trainTypeTree.picker.getView().getChecked();
for(var i=0;i<checkedNodes.length;i++){
var n = checkedNodes[i];
if(theNode.get("id") != n.get("id")){
n.set("checked" , false);
}
}
trainTypeTree.collapse();
//alert(com.getValue());
//alert(comboValues.substring(1));
//com.setValue(comboValues.substring(1));
//单选部分
comboIds="";
comboValues="";
//if(theNode.get("checked")&&theNode.get("parentId")!=0){
if(theNode.get("checked")){
//alert(theNode.get("parentId"));
comboIds=theNode.get("id");
comboValues=theNode.get("text");
trainTypeTree.setValue(theNode.get("text"));
}else{
comboValues="";
}
trainTypeTree.setValue(comboValues);
});
trainTypeTree.setValue(comboValues);
});
代码有冗余部分,原来是多选,改成单选了,另外我这个是点击父节点才异步展开子节点的,使用的话,需要后台给相应的json数据。,比如:
[{"id":1,"parentId":0,"text":"人事系统培训","leaf":false,"checked":false},{"id":4,"parentId":0,"text":"rsxtpx","leaf":false,"checked":false}]
[{"id":2,"parentId":2,"text":"组织训调","leaf":true,"checked":false},{"id":3,"parentId":3,"text":"岗位培训","leaf":true,"checked":false}]
[{"id":5,"parentId":5,"text":"zzpx","leaf":true,"checked":false},{"id":6,"parentId":6,"text":"gwpx","leaf":true,"checked":false}]
其中父节点:人事系统培训;子节点:组织讯调,岗位培训
父节点:rsxtpx;子节点:zzpx,gwpx
java0706
2012-09-06
打赏
举报
回复
楼上的能否说的清楚点,怎样取得id隐藏值,方便的话贴下成功实现的代码,谢谢!
java0706
2012-09-06
打赏
举报
回复
[Quote=引用 9 楼 的回复:]
谢谢大家了,我的那两个问题搞定了,第一个问题解决方法:Ext.onReady(function() {
Ext.Loader.setConfig({enabled:true}); });第二个问题解决方法,我把self.picker.on({
checkchange : function(node, checked,obj) {}});这个方法摘带界面上去,参加了两个参数,方便取得id值。总算……
[/Quote]
能否说的清楚点,不是很明白您的意思,如果方便的话贴一点成功实现的代码look look
zhenchuang99
2012-09-04
打赏
举报
回复
谢谢大家了,我的那两个问题搞定了,第一个问题解决方法:Ext.onReady(function() {
Ext.Loader.setConfig({enabled:true}); });第二个问题解决方法,我把self.picker.on({
checkchange : function(node, checked,obj) {}});这个方法摘带界面上去,参加了两个参数,方便取得id值。总算是解决了。
wms821
2012-09-03
打赏
举报
回复
下拉树功能实现的代码比较多,
包括前台JS展现和后台树数据组装成json等;
参见开源项目jbob,该项目前台也用extjs:
http://code.google.com/p/jbob/downloads/detail?name=jbob-build-v1.1.rar
该项目里的\webapps\jbob\views\auth\resource\edit.js里的
parentResourceTree就是一个下拉树实现;
brightyq
2012-08-28
打赏
举报
回复
下拉树?还是下拉列表?
这里也有例子哦。
http://dev.sencha.com/deploy/ext-4.0.7-gpl/docs/index.html#!/example/form/combos.html
一点点弄。这东西是体力活。
zhenchuang99
2012-08-28
打赏
举报
回复
/**comboboxtree.js*/
Ext.define("Ext.ux.comboboxtree", {
extend : "Ext.form.field.Picker",
requires : ["Ext.tree.Panel"],
initComponent : function() {
var self = this;
Ext.apply(self, {
fieldLabel : self.fieldLabel,
labelWidth : self.labelWidth
});
self.callParent();
},
createPicker : function() {
var self = this;
var store = Ext.create('Ext.data.TreeStore', {
proxy : {
type : 'ajax',
url : self.storeUrl
},
sorters : [{
property : 'leaf',
direction : 'ASC'
}, {
property : 'text',
direction : 'ASC'
}],
root : {
id : self.rootId,
text : self.rootText
},
nodeParameter : self.treeNodeParameter
});
self.picker = new Ext.tree.Panel({
height : 300,
autoScroll : true,
floating : true,
focusOnToFront : false,
shadow : true,
ownerCt : this.ownerCt,
useArrows : true,
store : store,
animate:true,
rootVisible : false
});
self.picker.on({
checkchange : function(node, checked,obj) {
var records = self.picker.getView().getChecked(), names = [], values = [];
/**此注释部分为多选
Ext.Array.each(records, function(rec) {
names.push(rec.get('text'));
values.push(rec.get('id'));
});
self.setRawValue(values.join(';'));// 隐藏值
self.setValue(names.join(';'));// 显示值
*/
/**此处为单选*/
var checkedNodes =self.picker.getView().getChecked();
//alert(node.get("id"));
if(node.get("checked")){
self.setRawValue(node.get("id"));// 隐藏值
self.setValue(node.get("text"));// 显示值
}
for(var i=0;i<checkedNodes.length;i++){
var n = checkedNodes[i];
if(node.get("id") != n.get("id")){
n.set("checked" , false);
}
}
/**此处为单选*/
}
});
return self.picker;
},
alignPicker : function() {
var me = this, picker, isAbove, aboveSfx = '-above';
if (this.isExpanded) {
picker = me.getPicker();
if (me.matchFieldWidth) {
picker.setWidth(me.bodyEl.getWidth());
}
if (picker.isFloating()) {
picker.alignTo(me.inputEl, "", me.pickerOffset);
isAbove = picker.el.getY() < me.inputEl.getY();
me.bodyEl[isAbove ? 'addCls' : 'removeCls'](me.openCls
+ aboveSfx);
picker.el[isAbove ? 'addCls' : 'removeCls'](picker.baseCls
+ aboveSfx);
}
}
}
});
···································
今天捣鼓了一个,有两个问题存在,1是不能自动加载,需要刷新下才能render到界面,2是明明设置了 self.setRawValue(node.get("id"));// 隐藏值
self.setValue(node.get("text"));// 显示值
,在界面上使用取值时,getValue()和getRawValue()却都只拿到‘text’,而拿不到‘id’的值
zhenchuang99
2012-08-28
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
请看官方文档
http://dev.sencha.com/deploy/ext-4.0.7-gpl/docs/index.html#!/example/tree/two-trees.html
[/Quote]
树我是没有问题了,就是下拉树不行了。
zhenchuang99
2012-08-28
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
同学啊,善待Google啊,这种问题完全浪费分数啊:
http://blog.csdn.net/jelly_bitores/article/details/7623135
[/Quote]
百度出来的,倒腾了一天,ie9,firefox不兼容。崩溃啊。
这个用户很懒
2012-08-28
打赏
举报
回复
请看官方文档
http://dev.sencha.com/deploy/ext-4.0.7-gpl/docs/index.html#!/example/tree/two-trees.html
MiceRice
2012-08-28
打赏
举报
回复
同学啊,善待Google啊,这种问题完全浪费分数啊:
http://blog.csdn.net/jelly_bitores/article/details/7623135
Extjs4
下拉
树菜单ComboBoxTree支持单选和多选并且支持展开选中指定节点的通用控件
在这个特定的情况下,我们讨论的是一个定制的
下拉
树菜单控件——ComboBoxTree,它在
ExtJS4
中
实现
了单选和多选功能,并且具备展开选中指定节点的能力。这个控件在实际项目中已经被广泛使用并证明了其稳定性和实用性,...
ExtJs4
.2
下拉
树(修改版)
ExtJs4
.2没有直接提供
下拉
树这个组件,但是有例子可以用,文件位置:ext-4.2.1.883\examples\ux\TreePicker.js 但是它有点小毛病吧:默认显示了根节点;达到最小高度时再展开节点,高度不能自动调整。 所以我做了一...
extjs4
+Spring mvc
实现
简单的增删改查
本demo是一个简单的java maven项目,数据库名和连接参数都配置在pom.xml中。后台使用了spring mvc,前台是
extjs4
,并且运用了
extjs4
的mvc模式。简单
实现
对一张表的增删改查操作,有不足之处,大家互相交流。
ExtJS4
+Accordion+SERVLET/STRUTS2+JSON+Ext.tree.Panel
实例
在与
ExtJS4
结合使用时,Servlet通常用于接收前端发送的JSON数据请求,处理业务逻辑,并返回相应的JSON数据。 Struts2是一个基于MVC设计模式的Java Web框架,用于简化企业级应用开发。它提供了处理用户请求、控制...
Extjs大型项目
实例
Extjs大型项目
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章