EXTJS的工作总结

工作总结

   ExtJS是什么?在我进了公司之后我才开始听到这个名词,之前只是听说过JQuery,还没用过,甚至之前也只是偶尔修改下javascript,真正使用javascript还未曾试过。接触EXTJS后,我也开始对javascript慢慢地了解更多一些了。EXTJS给了我一种新的编程乐趣和编程方式,让我抛开了写HTML代码的界面,让我可以快速地布局出自己想要而且体验不错的界面!

什么是EXT

  1ExtJS可以用来开发RIA也即富客户端AJAX应用,是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.NetJavaPhp等各种开发语言开发的应用中。ExtJs最开始基于YUI技术,由开发人员JackSlocum开发,通过参考JavaSwing等机制来组织可视化组件,无论从UI界面上CSS样式的应用,到数据解析上的异常处理,都可算是一款不可多得的JavaScript客户端技术的精品。

2ExtUI组件模型和开发理念脱胎、成型于Yahoo组件库YUIJava平台Swing两者,并为开发者屏蔽了大量跨浏览器方面的处理。相对来说,EXT要比开发者直接针对DOMW3C对象模型开发UI组件轻松。

   在我第一次看到利用EXTJS来实现前端的酒店管理系统的时候,我就感觉这个界面非常友好和操作体验也很不错,操作简单,符合平常使用电脑的习惯。

  EXTJS,功能丰富,无人能出其右。

  无论是界面之美,还是功能之强,ext表格控件都高居榜首。

  单选行,多选行,高亮显示选中的行,推拽改变列宽度,按列排序,这些基本功能咱们就不提了。

  自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。

  再加上可编辑grid,添加新行,删除一或多行,提示脏数据,推拽改变grid大小,grid之间拖拽一或多行,甚至可以在treegrid之间进行拖拽,更甚至的是可以通过EXTJS自定义构造出自己的想要的拖拽,例如:“我需要从菜单树拖拽到panel生成相应的功能列表的panel,这个在我们的产品中,我已经通过参考别人的在treegrid之间拖拽以及在panelpanel之间的拖拽的实例来已经实现了在treepanel之间的拖拽,同时我也通过这个拖拽实现的经验,也实现了在treetoolbar之间的拖拽,这些功能实在太神奇了。

ext3开始支持各种方式的统计,且有控件支持excel导出。

ExtYUI外还支持JqueryPrototype等的多种JS底层库,让大家自由地选择。该框架完全基于纯Html/CSS+JS技术,提供丰富的跨浏览器UI组件,灵活采用JSON/XML数据源开发,使得服务端表示层的负荷真正减轻,从而达到客户端的MVC应用!ExtJs支持多平台下的主流浏览器 Internet Explorer 6+ FireFox 1.5+ (PC, Mac) Safari2+Opera9+

Ext学习及应用经验小结

一、理解Html DOMExt ElementComponent

  要学习及应用好Ext框架,需要理解Html DOMExt ElementComponent三者的区别。

  Ext是基于Web的富客户端框架,其完全是基于标准W3C技术构建设的,使用到的都是HTMLCSSDIV等相关技术。Ext最杰出之处,是开发了一系列非常简单易用的控件及组件,我们只需要使用这些组件就能实现各种丰富多彩的UI的开发。

无论组件有多少配置属性、还是事件、方法等等,其最终都会转化为HTML在浏览器上显示出来,而每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM对象,动态改变页面的内容,正是通过使用脚本语言来操作DOM对象实现。

例如:我在我们的产品中需要对toolbar快捷栏上的按钮进行右键删除功能时,EXTJS没有提供直接可以调用的实现方法,需要自己写,右键显示是一种浮动的菜单,由于按钮没有你可以抓得住的ContextMenu上下文菜单,并侦听contextMenu事件,所以我们必须要使用ExtjsgetEL()来获得按钮的Element引用,使右键菜单在相应的坐标上显示,obj.el().getXY(),并实现对按钮的删除操作,elElement类的简写,extjs中每个元素都被封装成对应的Element对象,以实现跨浏览器的兼容性,并提供更多扩展功能。

       二、熟悉ext组件体系

  Ext2.0以上的版本对整个框架进行了重构,最为杰出的是推出了一个以Component类为基础的组件体系,在Component类基础上,使用面向对象的方法,设计了一系列的组件及控件。因此,要能游刃有余地使用Ext,熟悉Ext组件体系是最基本的。

三、掌握核心控件和熟悉EXTJS的各种基础属性、方法及事件

  控件其实也是组件,比如用于显示树信息的TreePanel、用于显示表格的GridPanelEditorGridPanel,还有代表应用程序窗口的Ext.Window等都属于Ext控件。在使用Ext的时候,一定要掌握一些核心控件,特别是处于基类的控件。比如上面提到的几个控件,他们都是继承于面板Panel,所以我们要重点掌握面板这个核心控件的特性。比如面板由以下几个部分组成:一个顶部工具栏(tbar)、一个底部工具栏(bbar)、面板头部(header)、面板尾部(bottom)、面板主区域(body)几个部分组成。面板类中还内置了面板展开、关闭等功能,并提供一系列可重用的工具按钮使得我们可以轻松实现自定义的行为,面板可以放入其它任何容器中,面板本身是一个容器,他里面又可以包含各种其它组件。只要掌握了Panel的应用,那么学习TreePanelWindow等就会变得简单得多。

同样的道理,对于Ext表单字段来说,不管是ComboBoxNumberField、还是DateField,他们其它都是 Ext.form.Field类的子类,在他上面定义了表单字段的各种基本操作及特性。在学习使用表单字段组件时,一定要重点研究Field这个类,掌握他的主要方法、事件等,就能有助于更好的学习使用其它的字段。

多看EXTJS文档熟悉属性、方法及事件可以减少我们开发过程中不必要的麻烦,例如:在我们开发产品时,由于对EXTJS还不是完全摸透,总会走了一些冤枉路,本可以使用EXTJS中的属性、方法或事件就可以解决的问题,我们却找了一些无法解决问题的方法进行尝试,可能尝试成功了,可是对性能有影响了,或者说是解决的方法比较冗余了。例如:前两天我们在找一个时间格式为何通过EXT.AJAX.Request();异步提交方法来实现提交时间和使用纯Ajax的同步提交方法来实现提交时间时,两种方法在后台得到的时间格式不一样,而查询读取显示到日历控件上时,前者的时间格式可以在EXTJS的日历控件上正确显示数据,后者则无法兼容显示,我们尝试在网上找解决办法,可是没有好的解决办法,都是需要比较多的拆解步骤来重塑时间格式,这个方法感觉比较纠结和笨拙,找了很久都没有找到很好的解决方法,后来我一边找着一边想想才发现,想的方向错了,EXTJS的日历控件,时间格式的解决方法,应该还得从EXTJS出发来找解决方法。后来在文档中发现EXTJS有很多时间格式的转换!

四、学习及研究示例

  由于javascript语言非常灵活,不像静态强类型语言(比如Java)那样有固定的代码设计模式,而往往是不同的人就有不同的编程风格。在实际应用开发中,只有见多识广,才能在自己的在脑中建立一个开发库。

  学习别人的示例对于我们开发帮助会非常大,示例包括基本组件的应用、综合应用等多个方面。在此,简单推荐几个。

1、      Ext官方示例,在ext项目下载包的examples目录中,包括各个控件的基本应用演示,同时还有一些比较复杂的组合示例,有简有繁,非常适合初学者认真研究。

2、                     google中搜索出一些外国人写的实例,EXTJS在外国应用得比较多,实例也会写得比较精简和优化。

五、多运用

Ext看起来是非常简单的东西,稍有点编程知识的人,然而,当准备使用Ext开发一个项目时,却不知道从何处入手,或者是在使用Ext的时候,出了一点小问题自己不知道该如何解决。编程是一门实践性的科学,仅仅靠看书、看别人写的代码是远远不够的,因此,必须多做实践才行,只有通过不断从简单的示例开始练习,大量的使用,才能对Ext的组件特性、事件、事件处理机制以及与服务器端交互接口等深入的掌握,只有多做运用,深入了解ext的组件的工作原理及机制,才能编写出高级的Ext的应用。

六、熟读Ext项目的源代码

  如果要想深入应用Ext,那么阅读Ext项目的源代码这是必不可少的环节,Ext的代码质量非常高,通过阅读他的代码我们可以更加深刻的了解 javascript面向对象编程Ext代码中包含了很多高级的js技巧以及设计模式。例如:我刚进公司的时候,一个星期后经理叫我看一个酒店管理系统的EXTJS项目和书本,同时通过对一些示例的模仿实践,使我很快就可以对EXTJS比较了解和开始应用。在使用Ext的过程中,我们经常根据项目的需要对Ext组件进行扩展,设计自己的组件或控件,而如何实现一个自定义的Ext组件,我们可以从Ext的各个组件源代码中找到答案。

  Ext的源代码在Ext项目的source目录。读Ext源码,并不一定非要从某一个地方开始,而组件核心代码Component.js容器组件代码 Container.js、面板Panel.js等这些是必看的; core目录中的Element.jsExt.js等也是必看的。当需要从一个控件进行扩展的时候,最好能简单看一看这个控件的源代码

七、理解,熟悉,掌握Json

在项目中,Ext本身的华丽外表就很吸引眼球了,但这仅仅是其外在的美,还有最核心的内在美,即:JsonJson(JavaScript Object Notation) 是一种数据交互格式,一个不能实现数据交互功能的项目是没有任何意义的,大多的Ajax框架的数据交互都基于Json,如:jQueryExtJs等。因此理解Json掌握Json并熟练运用是很重要的。以目前主流的开发语言为例,.NET已经把Json封装到类中,无需配置,直接与数据库交互,轻松的封装直接使用;Java就麻烦些,必须去下一个Json包,然后再做一些配置,才可以使用;PHPJava差不多,也必须下载一个Json插件(和类相似),但是不用配置,直接封装使用。在实际的项目中,各自的取舍配置,都基于项目和需求,并不是每个项目(针对WEB)都一定要用到。但是,如果想在项目中用到此类的Ajax框架,Json的掌握又是必须的。

 

EXTJS的发展前景

随着网络的发展,我们更希望的是我们能一打开一个浏览器,我们就可以什么都能做。所以说,我感觉随着技术的进步,我们的平常生活使用的操作系统会偏向web形式,web操作系统会慢慢地走向成熟。

ExtJS最大的优势在于它将Web应用程序的操作方式向传统桌面应用程序的操作方式进行转化甚至消除了这种差异,从根本上提高了用户的使用体验,这是ExtJS应用前景广阔的主要原因,其次使用ExtJS对浏览器没有任何要求可以说是一种绿色的富客户端实现方式,这是它应用前景广阔的第二个原因,另外ExtJS提供的各种组件可以用更加标准的方式展示数据降低了开发难度,这可以说是它应用前景广阔的第三点原因。

现在随网络的发展,现在推行的光纤入户和3G网络及4G网络的推行,面向web的应用开发需求会越来越多,现在很多的开发都是B/S的架构。前不久ExtJS,将现有的ExtJS整合JQTouchRaphaël库,推出适用于最前沿Touch WebSencha Touch框架,该框架是世界上第一个基于HTML5Mobile App框架。

HTML5 是近十年来 Web 标准最巨大的飞跃。和以前的版本不同,HTML 5 并非仅仅用来表示 Web 内容,它的使命是将 Web 带入一个成熟的应用平台,在这个平台上,视频,音频,图象,动画,以及同电脑的交互都被标准化。尽管 HTML 5 的实现还有很长的路要走,但 HTML 5 正在改变 Web

我相信EXTJS,在未来好长一段时间都是一个不错的javascript的流行框架,随着HTML5的发展,EXTJS也会跟着基于HTML5的形成兼容HTML5的新框架。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、获取元素(Getting Elements) 1.Ext.get var el = Ext.get('myElementId');//获取元素,等同于document.getElementById('myElementId');//会缓存 2. Ext.fly var el = Ext.fly('myElementId')//不需要缓存。 注:享元模式(Flyweight Design Pattern)是一种节省内存的模式,该模式的大概原理是建立单个全体对象然后不断反复使用它。 3.Ext.getDom var elDom = Ext.getDom('elId'); // 依据id来查dom节点 var elDom1 = Ext.getDom(elDom); // 依据dom节点来查dom节点 二、CSS元素 4.addClass Ext.fly('elId').addClass('myCls'); // 加入元素的'myCls'的样式 5.radioClass Ext.fly('elId').radioClass('myCls');//添加一个或多个className到这个元素,并移除其所有侧边(siblings)节点上的同名样式。 6.removeClass Ext.fly('elId').removeClass('myCls'); // 移除元素的样式 7.toggleClass Ext.fly('elId').toggleClass('myCls'); // 加入样式 Ext.fly('elId').toggleClass('myCls'); // 移除样式 Ext.fly('elId').toggleClass('myCls'); // 再加入样式 8.hasClass if (Ext.fly('elId').hasClass('myCls')) {//判断是否已加上这个样式 // 是有样式的…… } 10.replaceClass Ext.fly('elId').replaceClass('myClsA', 'myClsB');//替换样式 11.getStyle var color = Ext.fly('elId').getStyle('color');//返回该元素的统一化当前样式和计算样式。 var zIndx = Ext.fly('elId').getStyle('z-index');//返回该元素的统一化当前样式和计算样式。 12.setStyle Ext.fly('elId').setStyle({ display : 'block', overflow : 'hidden', cursor : 'pointer' });//设置元素的样式,也可以用一个对象参数包含多个样式。 13.getColor Ext.fly('elId').getColor('color');//为指定的CSS属性返回CSS颜色 14.setOpacity Ext.fly('elId').setOpacity(.45, true);//设置元素的透明度。 15.clearOpacity Ext.fly('elId').clearOpacity();//清除这个元素的透明度设置 三、Dom游历 16.Ext.fly('elId').select('li:nth-child(2n)').addClass('red'); 17.is 测试当前元素是否与传入的选择符相符一致。 复制代码 代码如下: var el = Ext.get('elId'); if (el.is('p.myCls')) { // 条件成立 } 18.findParent 定位于此节点,以此节点为起点,向外围搜索外层的父节点,搜索条件必须符合并匹配传入的简易选择符。 Ext.fly('elId').findParent('div'); // 返回dom节点 Ext.fly('elId').findParent('div', 4); // 查找4个节点 Ext.fly('elId').findParent('div', null, true); // 返回Ext.Element 19.findParentNode 定位于此节点的“父节点”,以此节点的“父节点”为起点,向外围搜索外层的“父父”节点,搜索条件必须符合并匹配传入的简易选择符。 Ext.fly('elId').findParentNode('div'); 20.up 沿着DOM,向外围搜索外层的“父父”节点,搜索条件必须符合并匹配传入的简易选择符。 Ext.fly('elId').up('div'); Ext.fly('elId').up('div', 5); // 限5层的内查找 21.select 传入一个CSS选择符的参数,然后依据该CSS选择符从当前元素下面,形成期待匹配子节点的集合,也就是“选择”的操作,最后以一个Ext.CompositeElement类型的组合元素的形式返回。如果以Ext.select()调用表示从document可是搜索。 // 返回结果的CompositeElement Ext.fly('elId').select('div:nth-child(2)'); // 返回数组 Ext.fly('elId').select('div:nth-child(2)', true); // 整个document都会搜索 Ext.select('div:nth-child(2)'); 22.query 进行一次query的查询,返回DOM 节点组成的数组。可选地第二参数设置为查询的起点,如不指定则为 document。 // 返回dom节点组成的数组 Ext.query('div:nth-child(2)'); 23.child 基于送入的选择符,不限定深度进行搜索,符合的话选取单个子节点。 Ext.fly('elId').child('p.highlight'); // 返回的类型是Ext.Element Ext.fly('elId').child('p.highlight', true); // 返回dom节点 24.down 基于该选择符,"直接"选取单个子节点。 Ext.fly('elId').down('span'); // 返回的类型是Ext.Element Ext.fly('elId').down('span', true); // 返回dom节点 25.parent 返回当前节点的那个父节点,可选地可送入一个期待的选择符。 // 返回父节点,类型是Ext.Element Ext.fly('elId').parent(); // 返回父节点,类型是html dom Ext.fly('elId').parent("", true); // 返回父级节点,但一定要是div的,找到就返回,类型是Ext.Element Ext.fly('elId').parent("div"); 26.next 获取下一个侧边节点,跳过文本节点。可选地可送入一个期待的选择符。 // 返回下一个侧边节点,类型是Ext.Element Ext.fly('elId').next(); // 返回下一个侧边节点,类型是html dom Ext.fly('elId').next("", true); // 返回下一个侧边节点,但一定要是div的,找到就返回,类型是Ext.Element Ext.fly('elId').next("div"); 27.prev 获取上一个侧边节点,跳过文本节点。可选地可送入一个期待的选择符。 // 返回上一个侧边节点,类型是Ext.Element Ext.fly('elId').prev(); // 返回上一个侧边节点,类型是html dom Ext.fly('elId').prev("", true); // 返回上一个侧边节点,但一定要是div的,找到就返回,类型是Ext.Element Ext.fly('elId').prev("div"); 28.first 获取第一个侧边节点,跳过文本节点。可选地可送入一个期待的选择符。 // 返回第一个侧边节点,类型是Ext.Element Ext.fly('elId').first(); // 返回第一个侧边节点,类型是html dom Ext.fly('elId').first("", true); // 返回第一个侧边节点,但一定要是div的,找到就返回,类型是Ext.Element Ext.fly('elId').first("div"); 29.last 获取最后一个侧边节点,跳过文本节点。可选地可送入一个期待的选择符。 // 返回最后一个侧边节点,类型是Ext.Element Ext.fly('elId').last(); // 返回最后一个侧边节点,类型是html dom Ext.fly('elId').last("", true); // 返回最后一个侧边节点,但一定要是div的,找到就返回,类型是Ext.Element Ext.fly('elId').last("div"); 四、DOM操控(DHTML常见的一项任务就是DOM元素的增、删、改、查) 30.appendChild 把送入的元素归为这个元素的子元素。 var el = Ext.get('elId1'); // 用id指定 Ext.fly('elId').appendChild('elId2'); // Ext.Element添加 Ext.fly('elId').appendChild(el); // 选择符组合地添加 Ext.fly('elId').appendChild(['elId2','elId3']); // 直接添加dom节点 Ext.fly('elId').appendChild(el.dom); // 添加CompositeElement,一组的div Ext.fly('elId').appendChild(Ext.select('div')); 31.appendTo 把这个元素添加到送入的元素里面。 var el = Ext.get('elId1'); // 'elId'添加到'elId2'里面 Ext.fly('elId').appendTo('elId2'); Ext.fly('elId').appendTo(el); // 添加到Ext.Element el 32.insertBefore 传入一个元素的参数,将其放置在当前元素之前的位置。 var el = Ext.get('elId1'); // dom节点在前面插入 Ext.fly('elId').insertBefore('elId2'); //Ext.Element el在前面插入 Ext.fly('elId').insertBefore(el); 33.insertAfter 传入一个元素的参数,将其放置在当前元素之后的位置。 var el = Ext.get('elId1'); // dom节点在后面插入 Ext.fly('elId').insertAfter('elId2'); // Ext.Element el在后面插入 Ext.fly('elId').insertAfter(el); 34.insertFirst 可以是插入一个元素,也可以是创建一个元素(要创建的话请使用“DomHelper配置项对象”作为参数传入),总之,这个元素作为当前元素的第一个子元素出现。 var el = Ext.get('elId1'); // 插入的dom节点作为第一个元素 Ext.fly('elId').insertFirst('elId2'); // 插入的Ext.Element作为第一个元素 Ext.fly('elId').insertFirst(el); // 用DomHelper配置项创建新节点,新节点会作为第一个子元素被插入。 Ext.fly('elId').insertFirst({ tag: 'p', cls: 'myCls', html: 'Hi I am the new first child' }); 35.replace 用于当前这个元素替换传入的元素。 var el = Ext.get('elId1'); // 'elId'去替换'elId2' Ext.fly('elId').replace('elId2'); // 'elId'去替换'elId1' Ext.fly('elId').replace(el); 36.replaceWith 用传入的元素替换这个元素。参数可以是新元素或是要创建的DomHelper配置项对象。 var el = Ext.get('elId1'); Ext.fly('elId').replaceWith('elId2'); // 'elId2'替换掉'elId'. Ext.fly('elId').replaceWith(el); // 'elId1'替换掉'elId' // 用DomHelper配置项创建新节点,并用该节点换掉‘elId'。 Ext.fly('elId').replaceWith({ tag: 'p', cls: 'myCls', html: 'Hi I have replaced elId' }); 五、DomHelper配置项 37.createChild 传入一个DomHelper配置项对象的参数,将其创建并加入到该元素。 var el = Ext.get('elId'); var dhConfig = { tag: 'p', cls: 'myCls', html: 'Hi I have replaced elId' }; // 创建新的节点,放到'elId'里面 el.createChild(dhConfig); // 创建新的节点,居el第一个子元素之前 el.createChild(dhConfig, el.first()); 38.wrap 创建一个新的元素,包裹在当前元素外面。 Ext.fly('elId').wrap(); // div包着elId // 用新建的一个元素来包着elId Ext.fly('elId').wrap({ tag: 'p', cls: 'myCls', html: 'Hi I have replaced elId' }); 六、Html片断 38.insertHtml 插入HTML片断到这个元素。至于要插入的html放在元素的哪里,你可指定beforeBegin, beforeEnd, afterBegin, afterEnd这几种。第二个参数是插入HTML片断,第三个参数是决定是否返回一个Ext.Element类型的DOM对象。 Ext.fly('elId').insertHtml( 'beforeBegin', '<p><a href="anotherpage.html'>点击我</a></p>' ); // 返回dom节点 Ext.fly('elId').insertHtml( 'beforeBegin', '<p><a href="anotherpage.html'>点击我</a></p>', true ); // 返回Ext.Element 39.remove 从DOM里面移除当前元素,并从缓存中删除。. Ext.fly('elId').remove(); // elId在缓存和dom里面都没有 40.removeNode 移除document的DOM节点。如果是body节点的话会被忽略。 Ext.removeNode(node); // 从dom里面移除(HTMLElement) 七、Ajax 41.load 直接访问Updater的Ext.Updater.update()方法(相同的参数)。参数与Ext.Updater.update()方法的一致。 Ext.fly('elId').load({url: 'serverSide.php'}) 42.getUpdater 获取这个元素的UpdateManager。 var updr = Ext.fly('elId').getUpdater(); updr.update({ url: 'http://myserver.com/index.php', params: { param1: "foo", param2: "bar" } }); 八、事件控制Event Handling 43.addListener/on 为此元素加入一个事件处理函数。on()是其简写方式。简写方式作用等价,写代码时更省力。 var el = Ext.get('elId'); el.on('click', function(e,t) { // e是一个标准化的事件对象(Ext.EventObject) // t就是点击的目标元素,这是个Ext.Element. // 对象指针this也指向t }); 44.removeListener/un 从这个元素上移除一个事件处理函数。un()是它的简写方式。 var el = Ext.get('elId'); el.un('click', this.handlerFn); // 或 el.removeListener('click', this.handlerFn); 45.Ext.EventObject EventObject呈现了统一各浏览器的这么一个事件模型,并尽量符合W3C的标准方法。 // e它不是一个标准的事件对象,而是Ext.EventObject。 function handleClick(e){ e.preventDefault(); var target = e.getTarget(); ... } var myDiv = Ext.get('myDiv'); myDiv.on("click", handleClick); // 或 Ext.EventManager.on('myDiv', 'click', handleClick); Ext.EventManager.addListener('myDiv', 'click', handleClick); 九、高级事件功能 46.委托delegation 要使用事件委托的方式代替,在容器身上登记一个事件处理器,按照依附的逻辑选择: Ext.fly('actions').on('click, function(e,t) { switch(t.id) { case ''btn-edit': // 处理特定元素的事件具体过程 break; case 'btn-delete': // 处理特定元素的事件具体过程 break; case 'btn-cancel': // 处理特定元素的事件具体过程 break; } }); 47.委托化delegate 你在登记事件的处理器的时候可以加入配置这个选项。一个简易选择符,用于过滤目标元素,或是往下一层查找目标的子孙。 el.on('click', function(e,t) { // 执行事件具体过程 }, this, { // 对子孙'clickable'有效 delegate: '.clickable' }); 48.翻转hover 这是一个Ext的翻转菜单的实例: // handles when the mouse enters the element function enter(e,t){ t.toggleClass('red'); } // handles when the mouse leaves the element function leave(e,t){ t.toggleClass('red'); } // subscribe to the hover el.hover(over, out); 49.移除事件句柄removeAllListeners 在该元素身上移除所有已加入的侦听器。 el.removeAllListeners(); 50.是否一次性触发single 你在登记事件的处理器的时候可以加入配置这个选项。true代表为事件触发后加入一个下次移除本身的处理函数。 el.on('click', function(e,t) { // 执行事件具体过程 }, this, { single: true // 触发一次后不会再执行事件了 }); 51.缓冲buffer 你在登记事件的处理器的时候可以加入配置这个选项。若指定一个毫秒数会把该处理函数安排到Ext.util.DelayedTask延时之后才执行。如果事件在那个事件再次触发,则原处理器句柄将不会被启用,但是新处理器句柄会安排在其位置。 el.on('click', function(e,t) { // 执行事件具体过程 }, this, { buffer: 1000 // 重复响应事件以一秒为时间间隔 }); 52.延时delay 你在登记事件的处理器的时候可以加入配置这个选项。制定触发事件后处理函数延时执行的时间。 el.on('click', function(e,t) { // 执行事件具体过程 }, this, { // 延迟事件,响应事件后开始计时(这里一秒) delay: 1000 }); 53.目标target 你在登记事件的处理器的时候可以加入配置这个选项。如果你想另外指定另外一个目标元素,你可以在这个配置项上面设置。这可保证在事件上报阶段中遇到这个元素才会执行这个处理函数。 复制代码 代码如下: el.on('click', function(e,t) { // 执行事件具体过程 }, this, { // 遇到里头的第一个'div'才会触发事件 target: el.up('div') }); 十、尺寸&大小 54.getHeight 返回元素的偏移(offset)高度。 var ht = Ext.fly('elId').getHeight(); 55.getWidth 返回元素的偏移(offset)宽度。 var wd = Ext.fly('elId').getWidth(); 56.setHeight 设置元素的高度。 Ext.fly('elId').setHeight(); 57.setWidth 设置元素的宽度。 Ext.fly('elId').setWidth(); 58.getBorderWidth 返回指定边(side(s))的padding宽度。 var bdr_wd = Ext.fly('elId').getBorderWidth('lr'); 59.getPadding 可以是t, l, r, b或是任何组合。例如,传入lr的参数会得到(l)eft padding +(r)ight padding。 var padding = Ext.fly('elId').getPadding('lr'); 60.clip 保存当前的溢出(overflow),然后进行裁剪元素的溢出部分 - 使用unclip()来移除。 Ext.fly('elId').clip(); 61.unclip 在调用clip()之前,返回原始的裁剪部分(溢出的)。 Ext.fly('elId').unclip(); 62.isBorderBox 测试不同的CSS规则/浏览器以确定该元素是否使用Border Box。 if (Ext.isBorderBox) { // } 十一、定位 63.getX 返回元素相对于页面坐标的X位置。元素必须是属于DOM树中的一部分才拥有正确的页面坐标(display:none或未加入的elements返回false)。 var elX = Ext.fly('elId').getX() 64.getY 返回元素相对于页面坐标的Y位置。元素必须是属于DOM树中的一部分才拥有正确的页面坐标(display:none或未加入的elements返回false)。 var elY = Ext.fly('elId').getY() 65.getXY 返回元素当前页面坐标的位置。元素必须是属于DOM树中的一部分才拥有正确的页面坐标(display:none或未加入的elements返回false)。 var elXY = Ext.fly('elId').getXY() // elXY是数组 66.setX 返回元素相对于页面坐标的X位置。元素必须是属于DOM树中的一部分才拥有正确的页面坐标(display:none或未加入的elements返回false)。 Ext.fly('elId').setX(10) 67.setY 返回元素相对于页面坐标的Y位置。元素必须是属于DOM树中的一部分才拥有正确的页面坐标(display:none或未加入的elements返回false)。 Ext.fly('elId').setY(10) 68.setXY 返回元素当前页面坐标的位置。元素必须是属于DOM树中的一部分才拥有正确的页面坐标(display:none或未加入的elements返回false)。 Ext.fly('elId').setXY([20,10]) 69.getOffsetsTo 返回当前元素与送入元素的距离。这两个元素都必须是属于DOM树中的一部分才拥有正确的页面坐标(display:none或未加入的elements返回false)。 var elOffsets = Ext.fly('elId').getOffsetsTo(anotherEl); 70.getLeft 获取左边的X坐标。 var elLeft = Ext.fly('elId').getLeft(); 71.getRight 获取元素右边的X坐标(元素X位置 + 元素宽度)。 var elRight = Ext.fly('elId').getRight(); 72.getTop 获取顶部Y坐标。 var elTop = Ext.fly('elId').getTop(); 73.getBottom 获取元素的底部Y坐标(元素Y位置 + 元素宽度)。 var elBottom = Ext.fly('elId').getBottom(); 74.setLeft 直接使用CSS样式(代替setX()),设定元素的left位置。 Ext.fly('elId').setLeft(25) 75.setRight 设置元素CSS Right的样式。 Ext.fly('elId').setRight(15) 76.setTop 直接使用CSS样式(代替setY()),设定元素的top位置。 Ext.fly('elId').setTop(12) 77.setBottom 设置元素CSS Bottom的样式。 Ext.fly('elId').setBottom(15) 78.setLocation 无论这个元素如何定位,设置其在页面的坐标位置。元素必须是DOM树中的一部分才拥有页面坐标(display:none或未加入的elements会当作无效而返回false)。 Ext.fly('elId').setLocation(15,32) 79.moveTo 无论这个元素如何定位,设置其在页面的坐标位置。元素必须是DOM树中的一部分才拥有页面坐标(display:none或未加入的elements会当作无效而返回false)。 Ext.fly('elId').moveTo(12,17) 80.position 初始化元素的位置。如果未传入期待的位置,而又还没定位的话,将会设置当前元素为相对(relative)定位。 Ext.fly('elId').position("relative") 81.clearPositioning 当文档加载后清除位置并复位到默认。 Ext.fly('elId').clearPositioning() Ext.fly('elId').clearPositioning("top") 82.getPositioning 返回一个包含CSS定位信息的对象。有用的技巧:连同setPostioning一起,可在更新执行之前,先做一个快照(snapshot),之后便可恢复该元素。 var pos = Ext.fly('elId').getPositioning() 83.setPositioning 由getPositioning()返回的对象去进行定位。 Ext.fly('elId').setPositioning({ left: 'static', right: 'auto' }) 84.translatePoints 送入一个页面坐标的参数,将其翻译到元素的CSS left/top值。 // {left:translX, top: translY} var points = Ext.fly('elId').translatePoints(15,18);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值