- 浏览: 342128 次
- 性别:
- 来自: 武汉
最新评论
-
ynymf:
错位问题看这里:http://www.cnblogs.com/ ...
EXTJS制作的嵌套表格实例(点击一行,展开下面的子表) -
xlshlr:
code.php在哪????貌似么有找到这个文件
ExtJS带验证码登录框[新增回车提交] -
langfeng123ac:
二货,这种写法本地又不行,本地有图片,服务器上又没图片。。浪费 ...
JQUERY+ASP.NET的AJAX文件上传(含Demo) -
553718707:
楼主有没有解决方法啊?
EXTJS制作的嵌套表格实例(点击一行,展开下面的子表) -
553718707:
这个代码对于,子表格的列数很多的时候会出现子表格的列与数据行错 ...
EXTJS制作的嵌套表格实例(点击一行,展开下面的子表)
今天写了一个后台的菜单管理页面,新增或修改树节点时,需要选择已经存在的节点作为父节点,于是想让一个combox作为载体显示一个树的widget,EXTJS并没有提供该控件,于是逛了逛一些论坛和网站,发现vifir的博客系统使用到了此控件,不过并没有提供源代码参考,没办法,自己写一个吧...
以下代码是扩展于combox的 DynamicTreeCombox,代码如下:
下面是调用的代码,已经加上了注释:
贴上效果图:
[img]
http://www.iteye.com/upload/attachment/41240/4848558b-3532-38b7-9650-b32fc214bc73.jpg[/img]
以下代码是扩展于combox的 DynamicTreeCombox,代码如下:
- Ext.ns("Ext.ux.form");
- Ext.ux.form.DynamicTreeCombox= Ext.extend(Ext.form.ComboBox, {
- initComponent:function(){
- Ext.ux.form.DynamicTreeCombox.superclass.initComponent.call(this);
- this.addEvents('beforeClickNode','afterClickNode');
- if(!this.tree){
- this.tree=new Ext.tree.TreePanel({
- containerScroll:true,
- rootVisible:false,
- root:new Ext.tree.AsyncTreeNode()
- });
- this.tree.loader=new Ext.tree.TreeLoader(this.loaderConfig||{dataUrl:"",baseAttrs:{}});
- this.tree.loader.addListener("beforeload",this.beforeLoad,this);
- this.tree.loader.addListener("load",this.onLoad,this);
- this.tree.addListener('collapsenode',this.onNodeCollapse,this);
- this.tree.addListener('expandnode',this.onNodeExpand,this);
- }
- var fieldMp={
- text:"text",
- qtip:"qtip",
- parentFuncId:"id",
- icon:"icon"
- };
- if(!this.fieldMapping){
- this.fieldMapping=fieldMp;
- }else{
- Ext.applyIf(this.fieldMapping,fieldMp);
- }
- },
- initList:function(){
- if(!this.list){
- var cls = 'x-combo-list';
- this.list = new Ext.Layer({
- shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false
- });
- var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth);
- this.list.setWidth(lw);
- this.list.swallowEvent('mousewheel');
- this.innerList = this.list.createChild({cls:cls+'-inner'});
- this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
- this.innerList.setHeight("100%");
- }
- },
- doQuery:function(){
- if(this.expandAll){
- var loader=this.tree.loader;
- if(loader.baseAttrs){
- Ext.apply(loader.baseAttrs,{expanded:this.expandAll});
- }else{
- loader.baseAttrs={expanded:this.expandAll};
- }
- }
- if(!this.tree.rendered){
- this.tree.render(this.innerList);
- this.tree.addListener("click",this.clickNode,this);
- }
- this.expand();
- },
- beforeLoad:function(loader,node){
- if(node!=node.getOwnerTree().root){
- loader.baseParams.parentFuncId=node.attributes[this.fieldMapping.parentFuncId];
- }
- },
- onLoad:function(loader,node,res){
- var nodeArr=node.childNodes;
- for(var i=0,j=nodeArr.length;i<j;i++){
- if(nodeArr[i].attributes[this.fieldMapping.icon]){
- nodeArr[i].getUI().getIconEl().src=nodeArr[i].attributes[this.fieldMapping.icon];
- }
- nodeArr[i].setText(nodeArr[i].attributes[this.fieldMapping.text]);
- nodeArr[i].ui.textNode.setAttribute("qtip", nodeArr[i].attributes[this.fieldMapping.qtip]);
- }
- },
- clickNode:function(node){
- if(this.fireEvent('beforeClickNode',this,node)){
- this.setValue(node.attributes[this.displayField]);
- }
- this.fireEvent("afterClickNode",this,node);
- this.collapse();
- },
- onNodeCollapse:function(node){
- this.list.setHeight(this.tree.getEl().getHeight()+2);
- },
- onNodeExpand:function(node){
- this.list.setHeight(this.tree.getEl().getHeight()+2);
- },
- onDestroy:function(){
- if(this.view){
- this.view.el.removeAllListeners();
- this.view.el.remove();
- this.view.purgeListeners();
- }
- if(this.tree.loader){
- this.tree.loader.purgeListeners();
- }
- if(this.tree){
- this.tree.el.removeAllListerers();
- this.tree.el.remove();
- this.tree.purgeListeners();
- }
- if(this.innerList){
- this.innerList.destroy();
- }
- if(this.list){
- this.list.destroy();
- }
- Ext.form.ComboBox.superclass.onDestroy.call(this);
- }
- });
- Ext.reg("treecombox",Ext.ux.form.DynamicTreeCombox);
Ext.ns("Ext.ux.form"); Ext.ux.form.DynamicTreeCombox= Ext.extend(Ext.form.ComboBox, { initComponent:function(){ Ext.ux.form.DynamicTreeCombox.superclass.initComponent.call(this); this.addEvents('beforeClickNode','afterClickNode'); if(!this.tree){ this.tree=new Ext.tree.TreePanel({ containerScroll:true, rootVisible:false, root:new Ext.tree.AsyncTreeNode() }); this.tree.loader=new Ext.tree.TreeLoader(this.loaderConfig||{dataUrl:"",baseAttrs:{}}); this.tree.loader.addListener("beforeload",this.beforeLoad,this); this.tree.loader.addListener("load",this.onLoad,this); this.tree.addListener('collapsenode',this.onNodeCollapse,this); this.tree.addListener('expandnode',this.onNodeExpand,this); } var fieldMp={ text:"text", qtip:"qtip", parentFuncId:"id", icon:"icon" }; if(!this.fieldMapping){ this.fieldMapping=fieldMp; }else{ Ext.applyIf(this.fieldMapping,fieldMp); } }, initList:function(){ if(!this.list){ var cls = 'x-combo-list'; this.list = new Ext.Layer({ shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false }); var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth); this.list.setWidth(lw); this.list.swallowEvent('mousewheel'); this.innerList = this.list.createChild({cls:cls+'-inner'}); this.innerList.setWidth(lw - this.list.getFrameWidth('lr')); this.innerList.setHeight("100%"); } }, doQuery:function(){ if(this.expandAll){ var loader=this.tree.loader; if(loader.baseAttrs){ Ext.apply(loader.baseAttrs,{expanded:this.expandAll}); }else{ loader.baseAttrs={expanded:this.expandAll}; } } if(!this.tree.rendered){ this.tree.render(this.innerList); this.tree.addListener("click",this.clickNode,this); } this.expand(); }, beforeLoad:function(loader,node){ if(node!=node.getOwnerTree().root){ loader.baseParams.parentFuncId=node.attributes[this.fieldMapping.parentFuncId]; } }, onLoad:function(loader,node,res){ var nodeArr=node.childNodes; for(var i=0,j=nodeArr.length;i<j;i++){ if(nodeArr[i].attributes[this.fieldMapping.icon]){ nodeArr[i].getUI().getIconEl().src=nodeArr[i].attributes[this.fieldMapping.icon]; } nodeArr[i].setText(nodeArr[i].attributes[this.fieldMapping.text]); nodeArr[i].ui.textNode.setAttribute("qtip", nodeArr[i].attributes[this.fieldMapping.qtip]); } }, clickNode:function(node){ if(this.fireEvent('beforeClickNode',this,node)){ this.setValue(node.attributes[this.displayField]); } this.fireEvent("afterClickNode",this,node); this.collapse(); }, onNodeCollapse:function(node){ this.list.setHeight(this.tree.getEl().getHeight()+2); }, onNodeExpand:function(node){ this.list.setHeight(this.tree.getEl().getHeight()+2); }, onDestroy:function(){ if(this.view){ this.view.el.removeAllListeners(); this.view.el.remove(); this.view.purgeListeners(); } if(this.tree.loader){ this.tree.loader.purgeListeners(); } if(this.tree){ this.tree.el.removeAllListerers(); this.tree.el.remove(); this.tree.purgeListeners(); } if(this.innerList){ this.innerList.destroy(); } if(this.list){ this.list.destroy(); } Ext.form.ComboBox.superclass.onDestroy.call(this); } }); Ext.reg("treecombox",Ext.ux.form.DynamicTreeCombox);
下面是调用的代码,已经加上了注释:
- Ext.QuickTips.init();
- Ext.onReady(function(){
- var mycbo=new Ext.ux.form.DynamicTreeCombox({
- expandAll:false,//是否在点击combox时将树全部展开
- displayField:"nameLabelCode",//点击树节点时,将节点的哪个字段设置为combox的值
- fieldLabel:"Dynamic Tree Combo",
- readOnly:true,
- width:180,
- loaderConfig:{
- dataUrl:sys.Constants.ROOTPATH+"/sysmgr/SysMenu_list.do",//加载树的URL
- baseParams:{parentFuncId:""}//传递给后台的参数,其中parentFuncId是必须的,而且初始化为第一次加载时parentFuncId为空,即加载的是后台数据库的根节点
- },
- fieldMapping:{//因为我的后台程序返回的没有text qtip字段,故加上fieldMapping进行映射,如果后台返回的json有这几个字段,此属性可省略
- text:"nameLabelCode",//映射node的text字段
- qtip:"descriptionLabelCode",//映射node的qtip字段
- parentFuncId:"funcId"//映射动态请求后台时使用node的funcId字段作为请求参数
- }
- });
- var myform=new Ext.form.FormPanel({
- renderTo:Ext.getBody(),
- width:350,
- height:100,
- frame:true,
- labelWidth:150,
- items:[mycbo]
- });
- });
Ext.QuickTips.init(); Ext.onReady(function(){ var mycbo=new Ext.ux.form.DynamicTreeCombox({ expandAll:false,//是否在点击combox时将树全部展开 displayField:"nameLabelCode",//点击树节点时,将节点的哪个字段设置为combox的值 fieldLabel:"Dynamic Tree Combo", readOnly:true, width:180, loaderConfig:{ dataUrl:sys.Constants.ROOTPATH+"/sysmgr/SysMenu_list.do",//加载树的URL baseParams:{parentFuncId:""}//传递给后台的参数,其中parentFuncId是必须的,而且初始化为第一次加载时parentFuncId为空,即加载的是后台数据库的根节点 }, fieldMapping:{//因为我的后台程序返回的没有text qtip字段,故加上fieldMapping进行映射,如果后台返回的json有这几个字段,此属性可省略 text:"nameLabelCode",//映射node的text字段 qtip:"descriptionLabelCode",//映射node的qtip字段 parentFuncId:"funcId"//映射动态请求后台时使用node的funcId字段作为请求参数 } }); var myform=new Ext.form.FormPanel({ renderTo:Ext.getBody(), width:350, height:100, frame:true, labelWidth:150, items:[mycbo] }); });
贴上效果图:
[img]
http://www.iteye.com/upload/attachment/41240/4848558b-3532-38b7-9650-b32fc214bc73.jpg[/img]
发表评论
-
浅谈Coolite 方法调用
2009-06-13 08:24 2879今天需要做个复选框删除,碰到了一个小难题,然后我一通乱写,居然 ... -
ExtJS Loading 悬浮层
2009-06-08 11:45 4219<!DOCTYPE html PUBLIC &q ... -
Ext中TreePanel控件和TabPanel控件搭配测试
2009-03-23 08:58 2647在实际的项目中,左边树形菜单,提供各种功能点击,右边一个面板, ... -
ExtJs grid使用详细[转]
2009-03-08 21:36 89392008-11-20 09:09 Ext ... -
ExtJS带验证码登录框[新增回车提交]
2009-03-08 21:29 7030/** 用户带验证码登 ... -
ExtJs2.0学习系列(14)--Ext.TreePanel之第三式(可增删改的树)
2009-03-04 19:28 1449继续tree的learn! 今天就来个可增删改的树吧,操作数 ... -
extjs中 combobox级联
2009-03-04 19:13 7336关键字: extjs, combobox, 级 ... -
ext动态新增一行之二
2009-03-03 10:39 1441ext 动态 新增行 新增一行(2)------------- ... -
ext动态新增一行
2009-03-03 10:37 1561ext 动态 新增行 新增一行(1)------------- ... -
ext表单之高级选项
2009-03-03 10:36 1163ext表单之高级选项--------------------- ... -
ext实现标签式浏览内容
2009-03-03 10:31 1507Ext.onReady(function(){ E ... -
ext异步树加入子节点事件
2009-03-03 10:30 2144extext异步树加入子节点 ... -
实现Ext combox 动态数据加载
2009-03-02 20:37 2479核心代码如下:(注意名称的对应!) 服务器生成的json数据形 ... -
解决TreeNode.reload()失效的办法
2009-03-02 20:36 3881Ext Api文档里面 TreeNode.reload()是没 ... -
Ext2.0的通用grid包括(增、删、改、查、导出excel)
2009-03-02 20:32 2862下面为扩张grid的 代码/** * @a ... -
ext构造自己的组件
2009-03-02 20:16 1331/*** @title:新闻中心模块* @au ... -
Ext.Window
2009-02-28 17:19 2117var winUpload = new Ext.Window( ... -
ExtJs中的树分析及实现
2009-02-27 18:12 2296<网上抄录> 首先我们来看日志分类树,这一部分我将 ... -
扩展EXTJS框架的内容检查
2009-02-27 10:36 1058Ext.apply(Ext.form.VTyp ... -
刚写的B/S高级查询界面(基于ExtJs框架)
2009-02-26 10:16 4175这几天赶着做一个B/S系统,基于ExtJs框架,从中学了不少东 ...
相关推荐
ExtJS3 升级到 ExtJS4 方案 ExtJS3 升级到 ExtJS4 需要修改大量代码,主要是因为 ExtJS4 配备了一类新的系统,不向后兼容。在 ExtJS 3 里生成表的几个框架组件,ExtJS4 大多生成 div,这使得 CSS classes 将会失败...
ExtJS是一种广泛使用的JavaScript库,专门用于构建富客户端的Web应用程序。它提供了丰富的组件和工具,使得开发者可以创建出功能强大、用户界面友好的Web应用。在“extjs流程界面设计器参考”中,我们主要关注的是...
本书作为Extjs的中文教程,旨在帮助读者快速上手Extjs,其内容涉及Extjs的基础知识和实际应用。 #### 2. JavaScript基础知识 - **类的定义**: Extjs中的类继承于JavaScript原生类,通过Ext.extend来定义。这是...
ExtJS是一个广泛使用的JavaScript库,专门用于构建富客户端应用程序。版本3.3是该库的一个稳定版本,提供了许多功能和组件,使得Web开发者能够创建功能丰富的、交互性强的用户界面。这个“ExtJS3.3中文API.CHM”文档...
ExtJS 是一个流行的JavaScript框架,主要用于构建富客户端的Web应用程序。它提供了丰富的组件库、数据管理功能以及强大的用户界面(UI)元素。在标题和描述中提到的“Extjs4小图标”指的是ExtJS 4版本中使用的一系列...
ExtJS 是一个流行的JavaScript框架,用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件、数据绑定机制和强大的API,使开发者能够创建功能强大的、响应式的桌面和移动应用。7.6版本是ExtJS的一个重要更新,...
ExtJS 是一个强大的JavaScript前端框架,用于构建富客户端应用程序。版本4.1是该框架的一个重要里程碑,提供了许多新功能和改进。对于初学者来说,理解并掌握ExtJS 4.1的基础和特性是非常有益的。 标题中的"Extjs...
ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门ExtJS快速入门 ExtJS快速入门 ExtJS...
ExtJS是一款功能强大的JavaScript前端框架,它为开发者提供了构建富客户端Web应用的工具。这款框架以其丰富的组件库、可定制的界面和强大的数据绑定机制而闻名。标题中的"ExtJS经典皮肤集合"指的是该框架中包含的一...
ExtJS是一种广泛使用的JavaScript库,专门用于构建富客户端Web应用程序。这个压缩包包含了ExtJS的两个重要版本:2.2和3.2.1。这两个版本在Web开发领域都有着广泛的运用,它们各自拥有不同的特性和改进,对于理解...
EXTJS 是一个强大的JavaScript前端框架,它主要用于构建富客户端应用,提供丰富的用户界面组件和灵活的可定制性。EXTJS 的核心在于其组件化的架构,允许开发者构建复杂的UI布局和功能丰富的应用程序。以下是对EXTJS...
【EXTJS 3.4 开发前准备】 EXTJS 是一款强大的JavaScript库,主要用于构建桌面级的Web应用程序,提供丰富的用户界面组件和交互效果。3.4版本是EXTJS的一个重要里程碑,它提供了稳定的基础和丰富的组件库。本文将...
ExtJS是一款强大的JavaScript库,主要用于构建富客户端的Web应用程序。其界面设计器,正如标题所示,是一种可视化的开发工具,能够极大地提升开发效率和用户体验。这个工具允许开发者通过拖放组件和直观地调整属性来...
项目进行前端框架升级——extJS 4升级至extJS6.6所遇的一些问题及相对应的解决方案建议
适用于ExtJS4、ExtJS5 MD5加密算法!
EXTJS 6.2 SDK是EXT JavaScript库的一个版本,它是一个强大的前端开发框架,用于构建企业级的Web应用程序。EXTJS提供了丰富的组件库,包括数据管理、图表、表格、窗体和其他用户界面元素,使开发者能够创建功能丰富...
开始ExtJS之旅的第一步是要获得开发包,可以从官方网站www.ExtJS.com下载,以保证获 得最新版本。其下载地址是http://www.ExtJS.com/download,下载成功后的开发包是ExtJS- 2.0.2.zip,有6.08MB大。不过不用担心,这...
一 Extjs 基础 EXTJS4自学手册——EXT文件目录,本地加载文档,命名规范 EXTJS4自学手册——EXT基本方法、属性(onReady、define、create) EXTJS4自学手册——EXT基本方法、属性(apply、applyIf、constructor) ...
ExtJS是一种基于JavaScript的开源富客户端框架,用于构建桌面级的Web应用程序。它提供了一整套组件化的用户界面元素和强大的数据绑定机制,使得开发者能够创建功能丰富的、交互性强的Web应用。本文档集合包括了...