- 浏览: 235722 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
月度银墙:
wangxiang243 写道不错 !但是ext4中六月和十二 ...
ext2,3,和4 版本 只显示年月的日期插件 -
38123978:
你好,我最近在看cassandra的性能,我想问一下5000万 ...
Cassandra学习笔记3 -
zhaojinmeng:
您好楼主,extjs5要怎么扩展啊?求指导
ext2,3,和4 版本 只显示年月的日期插件 -
love_wting:
为什么下拉框的表格样式显示了,数据访问json也从数据库中取到 ...
Extjs 下拉grid -
laungcisin:
yangxiutian 写道另外Ext4.2.1还故意把x-m ...
ext2,3,和4 版本 只显示年月的日期插件
tree拖拽
- 博客分类:
- Ext
当时遇到如下问题:
拖拽A tree 的a节点到B tree ,a节点可以顺利地被添加到了B tree中,我的问题是如何此时还让a 节点留在在A tree中,而不是彻底给了B tree。
这里做一下当时的一种解决方法,或许不是最好的方法 (大概思路是退拽完 往回追加所拖拽的node)
当时ext使用版本 3.3
首先 使tree的node具有clone方法
代码如下:
Ext.override(Ext.tree.TreeNode, { clone: function() { var atts = this.attributes; if(this.childrenRendered || this.loaded || !this.attributes.children) { var clone = new Ext.tree.TreeNode(Ext.apply({}, atts)); } else { var newAtts = Ext.apply({}, atts); newAtts.children = this.cloneUnrenderedChildren(); var clone = new Ext.tree.AsyncTreeNode(newAtts); } clone.text = this.text; for(var i=0; i<this.childNodes.length; i++){ clone.appendChild(this.childNodes[i].clone()); } return clone; }, cloneUnrenderedChildren: function() { unrenderedClone = function(n) { if(n.children) { for(var j=0; j<n.children.length; j++) { n.children[j] = unrenderedClone(n.children[j]); } } return n; }; var c = []; for(var i=0; i<this.attributes.children.length; i++) { c[i] = Ext.apply({}, this.attributes.children[i]); c[i] = unrenderedClone(c[i]); } return c; } });下面造2个树 :
第1个树
// yui-ext tree var tree = new Tree.TreePanel({ animate:true, autoScroll:true, loader: new Tree.TreeLoader(), enableDD:true, containerScroll: true, border: false, width: 250, height: 300, dropConfig: {appendOnly:true} }); // set the root node var root = new Tree.AsyncTreeNode({ text: 'Ext JS', draggable:false, // disable root node dragging id:'src', children: [ {text: '节点1',id:"node_1",leaf: true}, {text: '节点2',id:"node_2",leaf: false,children: [ {text: '节点21',id:"node_21",leaf: true}, {text: '节点22',id:"node_22",leaf: true} ]} ] }); tree.setRootNode(root); tree.render('tree'); root.expand(true, true);
第2个树:
// ExtJS tree var tree2 = new Tree.TreePanel({ animate:true, autoScroll:true, rootVisible: false, loader: new Ext.tree.TreeLoader(), containerScroll: true, border: false, width: 250, height: 300, enableDrop :true, dropConfig: {appendOnly:true,allowParentInsert:false}, listeners:{ "contextmenu":function(node,e){ var menu = new Ext.menu.Menu([ {text:"上移",iconCls:'up',handler:function(){ var nodeUp = new Ext.tree.TreeNode(Ext.apply({}, node.attributes));; var previousNode = node.previousSibling; var pNode = node.parentNode; node.remove(); pNode.insertBefore(nodeUp,previousNode); } }, {text:"下移",iconCls:'down',handler:function(){ var nodeUp = new Ext.tree.TreeNode(Ext.apply({}, node.nextSibling.attributes));; var previousNode = node.previousSibling; var pNode = node.parentNode; node.nextSibling.remove(); pNode.insertBefore(nodeUp,node); } }, {text:"删除",iconCls:'right_delete',handler:function(){ node.parentNode.removeChild(node); } }, {text:"重命名",iconCls:'right_rename',menu:new Ext.menu.Menu({ items: [ new Ext.form.FormPanel({ title: '输入', frame: true, defaultType: 'textfield', labelWidth: 30, width:190, items: [{ fieldLabel: '名称', name: 'name' }], buttons: [{ text: '确认', //scope:this, handler:function(){ var s = this.findParentByType("form").form.findField("name").getValue(); node.setText(s); menu.hide(); } }, { text: '取消',handler:function(){ menu.hide(); } }] }) ] }) } ]); if(!node.previousSibling){ menu.items.item(0).disable(); } if(!node.nextSibling){ menu.items.item(1).disable(); } menu.showAt(e.getPoint()); } }//监听结束 }); // add the root node var root2 = new Tree.AsyncTreeNode({ text: 'Extensions', draggable:false, id:'ux', children: [ {text: '节点3',id:"node_3",zyid:"node_3",leaf: false,children: [ {text: '节点22',id:"node_22",zyid:"node_22",leaf: true} ]}, {text: '节点4',id:"node_4",zyid:"node_4",leaf: false,children: [ {text: '节点21',id:"node_2",zyid:"node_21",leaf: true} ]} ] }); tree2.on("beforenodedrop",function(e){ //alert( e.data.node.text );取得拖拽的node if(e.dropNode.getOwnerTree()==tree){ if(e.data.node.hasChildNodes()){ e.cancel=true; Ext.Msg.alert('系统提示', '不允许拖拽目录!'); }else{ var isAllowDrag = true; var parentNode = e.target; var parentNodeChild = parentNode.childNodes; for(var i = 0;i<parentNodeChild.length;i++){ if(parentNodeChild[i].attributes.zyid==e.dropNode.id){ isAllowDrag=false; break; } } if(isAllowDrag==true){ e.cancel=false; e.dropNode = e.dropNode.clone(); //追加回节点 e.dropNode.attributes.zyid = e.dropNode.id; e.dropNode.allowChildren=false; }else{ e.cancel=true; Ext.Msg.alert('系统提示', '此业务流程已经存在该节点!'); } } }; }) tree2.setRootNode(root2); tree2.render('tree2'); root2.expand(true, true);
自此结束 以上仅是本人的一个做法 或许麻烦 或许有更好的办法
发表评论
-
js原型分析研究
2012-07-23 22:44 1432原型是个很微妙的东西,很多人不是很理解,理解了原型对于 ... -
Ext4.1.0 API中文版V0.4 Beta(持续更新)
2012-07-17 18:40 1075Ext4.1.0 API中文版V0.4 Beta html ... -
记录回答别人的Ext4问题
2012-07-10 13:23 26371:Ext4版本 双击Tab页面页签关闭 来自问题:ht ... -
Extjs4 时分秒日期插件
2012-05-11 13:05 12339插件1: 初始界面 弹出界面 插件代码 见附件 ... -
Ext3 日期范围插件
2012-04-03 17:32 2115先上 效果图有图有真相嘛 使用例子: ... -
Extjs2分页树 带查询功能
2012-03-29 11:37 4167先上效果图: 插件代码见附件 使 ... -
ext2 日期范围控件(2个控件)
2012-03-25 17:39 3004控件1 介绍: 首先加入 Ext.apply( ... -
ext2 grid 封装 (包含增删改查 导入导出等操作)
2012-02-27 14:32 5005最近项目又用到ext 比较 ... -
ExtJS Web应用程序开发指南(第2版)(针对Ext JS 4.0更新)源代码
2011-08-11 14:56 1102ExtJS Web应用程序开发指南(第2版)(针对Ext JS ... -
通过拖拽Grid改变行的顺序
2010-10-08 13:06 3758<script> var meta ... -
使用注解和反射构造ext的grid需要的列模型
2010-09-18 12:03 1668注解类: package xzd; import ... -
ExtJs Grid分页时序号自增的实现
2010-08-23 16:28 3045首先看到网上都是类似 http://www.blogjava. ... -
extjs 自己的小小总结
2010-08-13 21:15 3288总结自己的代码 可能以后会用到 记录一下 方便以后查阅 1 ... -
eclipse 中怎样来集成 JBOSS
2010-08-09 08:46 0eclipse 中怎样来集成 JBOSS -
ext2,3,和4 版本 只显示年月的日期插件
2010-08-03 20:23 15678Ext技术交流群:164648099 1:ext3版本 ... -
关于Extjs3.0中的TreeGrid (Ext.ux.maximgb.tg.EditorGridPanel)(转)
2010-08-01 21:38 4341转:(http://www.liyonghome.cn/ind ... -
ext grid 单元格提示 出现图片
2010-07-31 00:03 2646代码简单 只是记录一下 <html> ... -
ext tree相关知识
2010-07-30 23:53 2602ext tree 动态修改各个节点名称icon小图标 &qu ... -
ext 后台查数据库数据拼装tree数据
2010-07-26 22:21 2472来自:Extjs交流群(164648099) 说明: ... -
ext grid刷新后 滚动条位置不变
2010-07-19 21:11 2987Ext.override(Ext.grid.GridView, ...
相关推荐
flex tree 拖拽,flex tree 节点移动。
树形组件:支持selected选中状态(单/多),checkbox选择框,拖拽功能,增、删、改功能,双击展开、箭头展开收起功能,全部展开、收起功能,自定义图标、按钮、辅助信息等。
以前有许多人需要将 tree 的节点拖拽到其他控件中的问题,前段时间已经解决了,现在也将它的源代码贡献上来。 这个树的数据是静态的,没有做动态的,而且树节点的拖拽也没有做过多的处理,如果要知道怎么样做树...
Flex 4.5 实现tree拖拽到任意组建 拖到tree datagrid中并得到目标的全部数据实现添加组建
tree组件可实现节点拖拽、双击编辑、右键操作等等
VC开发拖拽树形控件设计代码VC + + code for drag and drop tree control design
ext的tree两个拖拽例子,话不多说,详见代码
本代码在EasyUI官网原treegrid拖放demo的基础上进行详尽的注释,并加以改动,如今可以实现两个treegrid之间互相拖放,本代码分别可以进行“剪切”和“复制”的功能,当前使用的是“剪切”功能,可通过改变treegrid-...
vue树可拖动,拖动项目排序
在我使用tree拖拽时总是失败,控制台输出了很多错误。 经过跟踪分析发现这是一个由于特殊配置导致的错误。 原先错误的代码如下: $('#tree').tree({ //省略其他 loadFilter: function(data, parent){ return data....
C# WinForm中拖拽TreeView节点
js+ztree 实现左侧树将节点拖到右侧面板,动态加载div,动态加载样式
一个基于Vue.js的可拖拽可分析树级组件。兼容Chrome,Firefox,IE Edge
整理了一下MSDN上的Tree Control 拖动实现,结合现有的资源,制作了一个Tree Control 拖动的Demo,供大家参考
flex tree+checkbox可实现级联勾选
将文件直接复制到layui/lay/modules目录下,会覆盖layui原有的tree.js,调用方法与layui树形组件的适应方式一致,新增的方法可在文件中查看
labVIEW 实现树形控件的值拖拽的另一个树形控件中,任意形成节点
el-tree draggable :allow-drop=allowDrop @node-drop=sort accordion style=font-size:14px;width:250px; ref=tree :data=catalogList :props=defaultProps :expand-on-click-node=false node-key=id :...
拖拽节点:ctreectrl树上的节点拖拽到Edit标签,和ctreectrl树上节点之间拖拽移动的演示程序。
树 Vue树组件 构建设置 # install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # build for production with minification npm run build # build for production and view ...