- 浏览: 327061 次
- 性别:
- 来自: 广州
文章分类
最新评论
http://blog.csdn.net/leecho571/article/details/6799059
Ext4改了好多,树控件都改得自己不认识了,切入正题:
在Ext3中只要注册了'click','contextmenu',就会将Node对象传进来,代码示例:
- contextmenu : function(Ext.tree.TreeNode,Ext.EventObject e)
这样到话就可以直接得到node对象,但在Ext4中变化好大了,传进来的没有Node对象,代码示例:
- itemcontextmenu( Ext.view.View this, Ext.data.Model record, HTMLElement item, Number index, Ext.EventObject e)
传进来到参数得不到Node对象就无法操纵树,今天看了源码,看了文档终于研究了好久才得出了一个结论:
其实record里面就包含了Ext3中treeNode到方法,recorrd就是Node对象。区别在于,Ext4中record只是完全跟数据相关,不跟页面展示发生关系,页面展示通过Ext.tree.View实现。
下面所一段Ext.tree.View中的源码:
- setNode: function(node) {
- var me = this;
- if (me.node && me.node != node) {
- me.mun(me.node, {
- expand: me.onNodeExpand,
- collapse: me.onNodeCollapse,
- append: me.onNodeAppend,
- insert: me.onNodeInsert,
- remove: me.onNodeRemove,
- sort: me.onNodeSort,
- scope: me
- });
- me.node = null;
- }
- if (node) {
- <span style="color:#FF0000;">Ext.data.NodeInterface.decorate(node);</span>
- me.removeAll();
- if (me.rootVisible) {
- me.add(node);
- }
- me.mon(node, {
- expand: me.onNodeExpand,
- collapse: me.onNodeCollapse,
- append: me.onNodeAppend,
- insert: me.onNodeInsert,
- remove: me.onNodeRemove,
- sort: me.onNodeSort,
- scope: me
- });
- me.node = node;
- if (node.isExpanded() && node.isLoaded()) {
- me.onNodeExpand(node, node.childNodes, true);
- }
- }
- },
标红到为关键代码,Ext.tree.View获得Ext.data.Model对象之后,将Ext.data.NodeInterface中Node相关的属性复制到Ext.data.Model中,看decorate的实现:
- decorate: function(record) {
- if (!record.isNode) {
- var mgr = Ext.ModelManager,
- modelName = record.modelName,
- modelClass = mgr.getModel(modelName),
- idName = modelClass.prototype.idProperty,
- instances = Ext.Array.filter(mgr.all.getArray(), function(item) {
- return item.modelName == modelName;
- }),
- iln = instances.length,
- newFields = [],
- i, instance, jln, j, newField;
- modelClass.override(this.getPrototypeBody());
- newFields = this.applyFields(modelClass, [
- {name: idName, type: 'string', defaultValue: null},
- {name: 'parentId', type: 'string', defaultValue: null},
- {name: 'index', type: 'int', defaultValue: null},
- {name: 'depth', type: 'int', defaultValue: 0},
- {name: 'expanded', type: 'bool', defaultValue: false, persist: false},
- {name: 'checked', type: 'auto', defaultValue: null},
- {name: 'leaf', type: 'bool', defaultValue: false, persist: false},
- {name: 'cls', type: 'string', defaultValue: null, persist: false},
- {name: 'iconCls', type: 'string', defaultValue: null, persist: false},
- {name: 'root', type: 'boolean', defaultValue: false, persist: false},
- {name: 'isLast', type: 'boolean', defaultValue: false, persist: false},
- {name: 'isFirst', type: 'boolean', defaultValue: false, persist: false},
- {name: 'allowDrop', type: 'boolean', defaultValue: true, persist: false},
- {name: 'allowDrag', type: 'boolean', defaultValue: true, persist: false},
- {name: 'loaded', type: 'boolean', defaultValue: false, persist: false},
- {name: 'loading', type: 'boolean', defaultValue: false, persist: false},
- {name: 'href', type: 'string', defaultValue: null, persist: false},
- {name: 'hrefTarget',type: 'string', defaultValue: null, persist: false},
- {name: 'qtip', type: 'string', defaultValue: null, persist: false},
- {name: 'qtitle', type: 'string', defaultValue: null, persist: false}
- ]);
- jln = newFields.length;
- for (i = 0; i < iln; i++) {
- instance = instances[i];
- for (j = 0; j < jln; j++) {
- newField = newFields[j];
- if (instance.get(newField.name) === undefined) {
- instance.data[newField.name] = newField.defaultValue;
- }
- }
- }
- }
- Ext.applyIf(record, {
- firstChild: null,
- lastChild: null,
- parentNode: null,
- previousSibling: null,
- nextSibling: null,
- childNodes: []
- });
- record.commit(true);
- record.enableBubble([
- "append",
- "remove",
- "move",
- "insert",
- "beforeappend",
- "beforeremove",
- "beforemove",
- "beforeinsert",
- "expand",
- "collapse",
- "beforeexpand",
- "beforecollapse",
- "sort"
- ]);
- return record;
- },
在decorate方法中复制了一系列树节点到相关属性和事件到Ext.data.Model中,并重写了getPrototypeBody方法
在getPrototypeBody方法中,将树节点到操作复制到了Ext.data.Model中,比如:insertChild,remove,eachChild等方法,具体可以去查Ext.data.NodeInterface的文档!!
发表评论
-
EasyUI和EasyUI桌面App
2013-04-15 11:56 1097http://fxz-2008.iteye.com/blog/ ... -
Jquery进度条
2013-04-12 09:08 795http://www.cnblogs.com/lhb25/ h ... -
11个适合触摸事件开发的JavaScript库
2013-04-10 09:23 767http://www.codecto.com/2012/08/ ... -
Jquery插件
2013-03-22 18:33 741http://www.cnblogs.com/ywqu/arc ... -
宝贝鱼
2013-03-18 23:54 630http://code.google.com/p/cshbbr ... -
HTML&JS MVC
2013-03-15 16:27 544http://www.bootcss.com/ http:// ... -
浏览器内核及Js引擎介绍
2013-03-15 16:18 695http://wenku.baidu.com/view/623 ... -
EXTJS Demo
2013-03-12 17:19 751http://web230531.host89.chinajs ... -
网站架构和两个3d技术
2013-01-17 16:52 0http://blog.csdn.net/lovingprin ... -
DWR数据反推实例
2013-01-16 16:42 1381http://blog.sina.com.cn/s/blog_ ... -
javascript调用服务端方法
2012-12-17 22:03 900http://www.php100.com/html/webk ... -
DWR推送技术
2012-12-13 16:13 10577DWR2.x的推技术也叫DWR Reverse Ajax(逆向 ... -
wireshark 协议过滤
2012-10-09 11:32 1537http://blog.csdn.net/cumirror/a ... -
一个很不错的Javascript绘图库
2012-09-27 17:18 0http://www.jgraph.com/ http://w ... -
dwr推送数据
2012-09-21 16:59 0Dwr数据推技术:http://blog.csdn.net/k ... -
Extjs4 Css美工相关
2012-09-03 10:39 2946转: http://www.sencha.com/lear ... -
Extjs下拉树组件
2012-09-03 09:40 914转: http://www.2cto.com/kf/20120 ... -
Javascript基础一(apply, call, arguments, prototype)
2012-08-22 22:42 1027//javascript: apply, call, argu ... -
Extjs4的事件实例
2012-08-09 09:11 740http://www.cnblogs.com/luluping ... -
EXTJS中的Store是如何工作的
2012-08-08 21:04 886http://idoa3l3x.blogbus.com/log ...
相关推荐
区别在于,远程脚本调用方式加载树节点信息使用的是WebInvokeTreeLoader,需要通过fn属性来指定用于加载数据的远程方法,并在beforeload事件处理器设置参数远程方法调用的参数值。而传统的树节点加载器是Ext.tree....
ExtJs4 Checkbox tree
Extjs的tree Extjs的tree Extjs的tree Extjs的tree Extjs的tree
extjs的tree的使用.doc
4. 节点增、删、改操作 ....... 后台是java struts1。 本例旨在说明extjs的tree操作,后台操作很简陋。给入门同学一个简单指导。 本例,存在几个明显的bug,但不影响本意,见谅。 需要C#无bug版的同学,请留下邮箱。...
Ext_Tree 树形菜单
ExtJs Tree
Extjs的Tree和Pane配合使用使用json做tree数据交互,感谢csdn,所以我也得做些贡献,获得一些积分
Extjs Tree + JSON + Struts2 示例源代码
TreePanel的各项属性能帮助我们动态加载extjs tree
extjs属性方法集中方便你查看学习,赶快来下载吧!学习extjs
最近在学习extjs tree,有两个不错的例子,希望对需要的朋友有所帮助!
利用extjs框架实现的后台经典显示, tree框架,动态加载。
NULL 博文链接:https://esayjava.iteye.com/blog/499176
将文件拷贝到extjs根目录下。运行即可。实现了选中之类。父类联动选中
extjs spring tree ajax树的事项,希望对大家有帮助,从别的地方下的
extjs tree 异步加载树型完整的一个web工程,自已已经试过,可用。
extjs tree 学习资料extjs tree 学习资料extjs tree 学习资料extjs tree 学习资料
ExtJS资料笔记(extjs各个属性的详解) ExtJS资料笔记(extjs各个属性的详解) ExtJS资料笔记(extjs各个属性的详解)
java写的Extjs异步树形控件示例,可直接部署