打印

ExtJS 序言三

ExtJS 序言三

3.1. 真的,我是为了树,才开始学ext的。



之前使用过xtree和dojo中的tree,感觉都是怪怪的,界面简陋,功能也不好上手,待看到ext里的树形真是眼前一亮,在此之前,动态增添,修改删除节点,拖拽和右键菜单,我一直认为是不可能实现的任务,而在ext上却轻松实现了,而且界面和动画效果相当完美。真是让人爱不释手啊。
树形是非常典型的一种数据结构,多级菜单,部门组织结构,省市县三级这种金字塔结构都可以用树形表示,要表示一个老爸有一帮孩子的情况真是非树形莫属啊,做好了这部分,绝对是个亮点。

3.2. 传统是先做出一棵树来。



树形世界的万物之初是一个TreePanel。
var tree = new Ext.tree.TreePanel('tree');这里的参数'tree',表示渲染的dom的id。html写着个<div id="tree"></div>做呼应呢,最后这棵树就出现在这个div的位置上。
现在我们获得了树形面板,既然是树就必须有一个根,有了根才能在上边加枝子,放叶子,最后装饰的像一棵树似的。嗯,所以根是必要的,我们就研究研究这个根是怎么咕哝出来的。
var root = new Ext.tree.TreeNode({text:'偶是根'});看到了吧,它自己都说它自己是根了,所以它就肯定是根没错。再看下面。
tree.setRootNode(root);tree.render();首先,我们把这个根root,放到tree里,用了setRootNode()方法,就是告诉tree,这是一个根,你可得把它放好啊。
立刻对tree进行渲染,让它出现在id="tree"的地方,这个id可是在上面指定的,如果有疑问,请翻回去继续研究,我们就不等你,继续了。
当当,我非常荣幸的向您宣布,咱们的第一棵树出来了。这是它的照片。

靠,这是树吗?
嗯,现在的确不太像树,因为它只有一个根。
靠,我们要的是树,你就搞出一个根来,有鸟用啊。
嗯,理论上等它自己发芽长成树,可能性是比较小,不如咱们偷偷插上几个枝子,说不定看起来就更像树了。
注意虽然只有一个根,不过也算是棵树,1.x的例子在lingo-sample/1.1.1/03-01.html。


3.3. 超越一个根



上回书说道,我们要偷偷插上几个杈子,让这个本来就是树的树,更像一棵树。
var root = new Ext.tree.TreeNode({text:'偶是根'});var node1 = new Ext.tree.TreeNode({text:'偶是根的第一个枝子'});var node2 = new Ext.tree.TreeNode({text:'偶是根的第一个枝子的第一个叶子'});var node3 = new Ext.tree.TreeNode({text:'偶是根的第一个叶子'});node1.appendChild(node2);root.appendChild(node1);root.appendChild(node3);我们从外边拿来三个TreeNode,不管不顾就把node2插到node1上,node1,node2一起插到root上,这下好了,咱们的树立刻就像是一棵树了。

咦?它怎么还是这么点儿东西?客官莫急,待小二儿给你整治一番,即看庐山真面目。

嗯,现在的确有点儿意思了,不过它开始的时候就那么缩在一团,看着很不爽,每次都要点这么几下才能看到底下的东西,咱们有没有办法让它每次渲染好就自己展开呢?
方法当然有咯,请上眼。
root.expand(true, true);这一下就能解您燃眉之急,第一个参数是说,是否递归展开所有子节点,如果是false,就只展开第一级子节点,子节点下面还是折叠着的,。第二个参数是说是否有动画效果,true的话,你可以明显看出来那些节点是一点儿点儿展开的,否则就是刷拉一下子就出来了.
为了方便,咱们的例子里直接就可以展开了,省的再去点啊。1.x的例子在lingo-sample/1.1.1/03-02.html。

3.4. 你不会认为2.0里跟1.x是一样的吧?



第一个区别就是TreePanel的定义,原来的id要放到{}中,对应的名字是el。像这样改:
var tree = new Ext.tree.TreePanel({el:'tree'});即使这样改完了,还是什么都看不见,我们错过了什么?用findbug看了一下dom,height竟然是0,当然啥也看不见了,2.0里的树为啥不会自动伸缩呢,只好咱们给它设置一个初始高度,在html里设置个300px的高度,就可以显示出来了。
<div id="tree" style="height:300px;"></div>另一个也如法炮制。我们就可以看到2.0比1.x多了鼠标移到树节点上时的高亮显示。

好了,看了这些例子,应该对树型有些认识了,虽然这里只有TreeNode,却能表示枝杈或者叶子,原理很简单,如果这个TreeNode下有其他节点,它就是一个枝杈,如果没有,它就是一个叶子,从它前头的图标就很容易看出来。嘿嘿,根其实就是一个没有上级节点的枝杈了。实际上,他们都是TreeNode而已,属性不同而已。
2.0的例子在lingo-sample/2.0/目录下,分别是03-01.html和03-02.html。

3.5. 这种装配树节点的形式,真是让人头大。



如此刀耕火种不但麻烦,而且容易犯错,有没有更简便一些的方法吗?答案是利用Ext.tree.TreeLoader和后台进行数据交换,我们在只提供数据,让TreeLoader帮咱们做数据转换和装配节点的操作。
啦啦啦,json和ajax要登场了,不过你是否还记得我说过,一旦涉及到ajax就需要配合服务器了,ajax是无法从本地文件系统直接取得数据的。
首先,让我们为TreePanel加上TreeLoader
var tree = new Ext.tree.TreePanel('tree', {loader: new Ext.tree.TreeLoader({dataUrl: '03-03.txt'})});在此,TreeLoader仅包含一个参数dataUrl: '03-03.txt',这个dataUrl表示,在渲染后要去哪里读取数据,为了方便模拟,我们写了一个txt文本文件提供数据,直接打开03-03.txt可以看到里边的内容。
[{text:'not leaf'},{text:'is leaf',leaf:true}]里边是一个包含了两个节点定义的数组,可能你会发觉那个多出来的属性leaf:true,它的效果很神奇,这一点我们马上就可以看到。
如果你现在就去匆匆忙忙的刷新页面,想看一下咱们的成果,那一定会失望而归,页面上没有像你期待的那样,从03-03.txt读取数据,显示到页面上,你依然只能看到那个孤零零的根。这是因为TreeNode是不支持ajax的,我们需要把根节点换成AsyncTreeNode,它可以实现咱们的愿望。
var root = new Ext.tree.AsyncTreeNode({text:'偶是根'});

估计谁第一次看到这场面都一定吓傻了。我们不是只定义了两个节点吗?怎么一下子跑出这么多东西来?先别着急,让我们先把root.expand(true, true)改成root.expand(),避免节点无限展开下去,然后慢慢研究这个情况。

现在场面被控制住了,取消了递归展开,只展开根节点的第一层节点,我们得到的确实是与03-03.txt文件里相对应的两个节点,不过这两个节点有些不同,not leaf节点的图标赫然是枝杈的图标,如果点击它前面的加号,便又成了上面的场景。Why?
原因就来自AsyncTreeNode,这个东西会继承根节点TreeLoader中dataUrl,你点展开的时候,会执行这个节点的expand()方法,ajax会跑到dataUrl指定的地址去取数据,用firebug可以看到当前节点id会作为参数传递给dataUrl指定的地址,这样我们的后台就可以通过这个节点的id计算出该返回什么数据,得到了数据TreeLoader去解析数据并装配成子节点,然后显示出来。
哈哈,现在就是关键部分了。因为咱们使用的03-03.txt提供的数据,不会判断当前节点的id,所以每次返回的数据都是一样的,这就是树会无限循环下去的原因了。
那么为啥只有第一个节点会无限循环下去呢?第二个节点就没有那个小加号,呵呵~因为第二个节点不是AsyncTreeNode ,TreeLoader在生成节点的时候会判断数据里的leaf属性,如果是leaf:true,那么就会生成TreeNode而不是AsyncTreeNode,TreeNode可不会自动去用ajax取值,自然就不会无限循环展开了。
现实中,异步读取属性的节点是很爽的一件事情,因为你可能要保存成千上万条节点记录。一次性全部装载的话,无论读取和渲染的速度都会很慢。使用异步读取的方式,只有点击某一节点的时候,才去获得子节点属性,并进行渲染,极大的提高了用户体验。而且ext的树形本身有缓存机制,打开一次,再点击也不会去重复读取了,提升了响应速度。
html例子,1.x版本在lingo-sample/1.1.1/03-03.html,2.0版本在lingo-sample/2.0/03-03.html。
为了巩固学习效果,咱们再写一个json获得数据的例子,这次的json稍微写复杂一点儿。

这次对应的json数据文件是03-04.txt。
[{text:'01',children:[{text:'01-01',leaf:true},{text:'01-02',children:[{text:'01-02-01',leaf:true},{text:'01-02-02',leaf:true}]},{text:'01-03',leaf:true}]},{text:'02',leaf:true}]这也可以看作是在数据不多的情况下,一次加载所有数据的途径,只要确保所有叶子节点上都加上leaf:true的属性,就不会出现循环展开的问题了。
html例子:1.x在lingo-sample/1.1.1/03-04.html,2.0在lingo-sample/2.0/03-04.html。

3.6. jsp的例子是一定要有的




3.7. 让你知道树都可以做些什么



3.7.1. 检阅树形的事件




3.7.2. 右键菜单并非单纯的事件




3.7.3. 默认图标好单调,改一下撒




3.7.4. 小小提示





3.8. 灰壳显灵!让我直接修改树节点的名称吧!




3.9. 我拖,我拖,我拖拖拖。




3.10. 更深一步,整合起来的是完整树形操作。



posted on 2008-01-07 12:53 夕阳夕下 阅读(2630) 评论(15)  编辑 收藏
评论#1楼  2008-01-07 13:13 beyondjay 图看不到   回复  引用  查看     
#2楼  2008-01-07 13:46 无意 欢迎继续写,到时候我学extjs 就靠你的文章了。   回复  引用  查看     
#3楼  2008-01-07 14:14 Share赖 很好,鼓励一下!   回复  引用  查看     
#4楼  2008-01-07 14:44 小庄 能写出这么搞笑的技术文章,楼主真乃人才也!   回复  引用  查看     
#5楼  2008-01-07 15:52 WinKen 上午才看了你的序二...
现在三又出现了..
不错...
再次学习...   回复  引用  查看     
#6楼  2008-01-07 16:14 [url=]过客甲 [未注册用户][/url] 好文   回复  引用  查看     
#7楼  2008-01-07 18:47 Soli 详细且有趣
等俺用到了就来你这学习,现在只浏览了一下,记住有这么个咚咚了,呵呵
  回复  引用  查看     
#8楼  2008-01-07 20:01 [url=]aNUiz [未注册用户][/url] 喜欢你的风格,哈哈。   回复  引用  查看     
#9楼  2008-01-07 21:24 [url=]kevin123 [未注册用户][/url] 楼主应该要提供个下载那就更好咯。。。   回复  引用  查看     
#10楼  2008-01-07 22:24 [url=]唐僧 [未注册用户][/url] 文章内容出自: http://www.family168.com/   回复  引用  查看     
#11楼  2008-01-08 08:23 阿武 很不错,感谢LZ   回复  引用  查看     
#12楼  2008-01-08 09:22 Matrix 楼主不应该把这文章放到首页原创区,这个已经被别人转烂了。。   回复  引用  查看     
#13楼  2008-01-09 00:19 lazylu 唉~不知道为什么~~EXTJS的TREE项目一多就慢得不得了~   回复  引用  查看     
#14楼  2008-01-11 16:17 kevin.zhan 请问一下,我照着你提示的方法,写了如下的代码,但是只有显示根结点,为什么?

// YUI tree
var tree = new Tree.TreePanel({
el:'tree',
loader: new Tree.TreeLoader({dataUrl:'get-nodes.txt'})
});

// add the root node
var root = new Tree.AsyncTreeNode({text:'让树自己长出树枝'});
tree.setRootNode(root);
tree.render();

root.expand(true, /*no anim*/ true);

在FireFox中看到,get-nodes.txt已经加载成功了。

TOP

天津办证刻章天津刻章办证刻章天津发票电话13013899131

天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn天津办证刻章天津刻章办证刻章天津发票网址 www.888bz.com.cn电话13092607313
公司名称:东欧刻章办证集团有限公司
地址:市区
联系人:王鹏  电子邮件:
hghg126hg@126.com
电话13013899131
QQ:867434864
网址:
http://www.888bz.com.cn专业代理上网文凭学历证书
欢迎进入
http://www.888bz.com.cn
欢迎进入http://www.888bz.com.cn

TOP

给大家推荐一个美女多的游戏

惊艳美女云集<美女三国> 千元大礼包人人有份
                                                       -------------三国类网页游戏的终极大作

   让人翘首以盼的由游戏盒子倾力打造的一款全新即时策略性网页游戏《美女三国之小乔出嫁》盛装开幕了。

   

    从《美女三国》sanguo.boxgm.com开区的预告发出,就有众多网友,来函来电咨询,问:美女三国 什么时候开始测试啊,什么时候正式开放啊。在此对一直支持我们的众多网友,和游戏盒子的120万老朋友们表示真挚的感谢!感谢你们对游戏盒子对《美女三国》的关注,支持和厚爱。   仅《美女三国之小乔初嫁》开服不足一个小时,便如潮水般涌进了近千的网友,开服次日注册用户就已突破万人。我们简单做了一下调查,其中以女性玩家人数最多,比例达到2/3 .

   金秋十月 丹桂飘香 ;金秋时月,暗香袭人,众多佳丽的加入,无疑也成了美女三国的一道亮丽的风景线。

  英雄榜也在不断的刷新,众多家族联盟也都踊跃的进入了美女三国。英雄的队伍也在不断的增长,在美女三国,有一展宏图,实现自己的统一霸业的为目标的霸业系玩家,还有誓复汉室一匡天下的忠义系玩家,也有是偏居一隅,求得安乐的 安乐系玩家。都在努力建立着自己的王国憧憬着自己的梦想。其逢乱世,究竟谁能成就霸业,谁能一匡天下,谁能称霸一方那。乱世造就几多悲歌,也成就几多英雄。自古美女爱英雄,英雄怜美女。金秋的十月,广邀天下英雄美女,共赴美女三国。建建千秋功业,留万古英明。那风华绝对,倾国倾城的美女,就是你!

   游戏盒子为了感谢众多网友对《美女三国》的厚爱和支持,决定让开区优惠活动延长至10月6日24时,每天参与答题边可获意外惊喜。美女三国伴你度过一个美好的假期。

   笔者也时尚了一把,带着对希望遇见美女一点憧憬,开始了我的美女三国之旅,上班时间也可以玩!好不惬意,哇进游戏一看这么多的免费道具真是好爽啊。

   你还等什么呢,赶快注册!建立自己的王国。

游戏盒子《美女三国》官方网站 http://pass.boxgm.com/Box_UserReg.asp?Lid=100006
游戏盒子通行证注册地址http://pass.boxgm.com/Box_UserReg.asp?Lid=100006

立即注册开始游戏吧!

友情提示:注册盒子通行证 可以通行游戏盒子所有游戏!并且有免费的加速器软件可以用啊  简单简单加速器http://www.jdjsq.com (终身免费)





如何优雅的解决你面临的网站推广问题?群发软件论坛群发网站推广又将何去何从?

TOP

热血江湖外挂的公告 http://www.55808.cn

热血旺旺,我们接到玩家反映,许多使用外挂(如热血特辅热血宝宝)的玩家游戏账号密码被盗,造成帐号丢失,游戏角色中的高级装备被转移。这些结果不仅让玩家多日来的努力付诸流水,还给玩家带来了情感上和经济上的损失热血江湖外挂
作为《热血智辅》的游戏运营商,看到这种情况,我们深感痛心。在此我们再次提醒广大玩家,使用外挂会危及您的帐号安全,造成帐号丢失。并且对于使用外挂程序的帐号,我们将继续加大打击力度热血旺旺外挂
请您珍惜您的宝贵帐号,祝您游戏愉快。
热血超辅:木马盗号软件最大的载体就是外挂,根据我们技术人员的测试,目前市面上流行的各种游戏辅助外挂,经核查几乎所有都含有病毒、木马。请自觉远离外挂,抵制外挂,拒绝使用外挂,自觉维护游戏环境热血嘉年华

TOP

TOP

健宝牧草种子新货到了!恒温库保存,质量有保障发芽率最低90%!www.tzyz.cn
健宝牧草澳大利亚太平洋种子公司选育而成的饲用品种,是禾本科一年生高产优质的新型牧草,具有超强的分蘖和再生能力,目前在欧、亚、澳、非等二十多个国家广泛种植。1引入我国后,在较大面积的示范种植中,与其他同类牧草相比较,优点突出;该品种植株高大,茎秆粗壮,根系发达,出苗20天后开始拔节,每天平均长高4—5厘米,健宝粗蛋白含量13.00%—22.59%,粗脂肪1.01%—2.01%,粗纤维25.05%—39.72%,无氮浸出物36.9%—43.79%,适宜播种期为5月1日-10日,适应性强,无病虫害。健宝牧草耐旱、抗寒,还具有一定的抗盐碱能力,我国南北各地都可以种植。在中等水肥条件下,亩产鲜草1.5万公斤,在无霜期长短不同的地区都能种植。亩用种子2-5公斤,专业十年、品质保证
十多年来,我们始终坚持以真诚求信誉,以质量求生存、以科技求发展的原则,努力构筑诚信品牌,以不断完善的经营管理,优质的销售服务,良好的公司信誉,高品质的产品,真诚服务于国内外广大用户,做到与客户共赢、真诚服务到永远!
地址:山东省新泰市周全特种养殖研究所  
网址:www.tzyz.cn  www.tzyz.com   
电话:0538-7065208
手机:13053816388 联系人:张经理
QQ:331320998
中国牧草网在线客服,点击这里和我直接沟通  http://www.tzyz.com  http://www.tzyz.cn

TOP

TOP








Suchmaschinenoptimierung mit Ranking-Hits