8.1. Ext.get
ext里用来获得Element的一个函数,用途还算比较广,可以通过不少途径获得咱们需要的Element,而这个Element包括很多有趣的功能。
Element跟document.getElementById("myDiv")得到的dom对象是不一样的,虽然你还可以使用老方式获得指定
id的元素,但那样就失去了ext提供的各种常用操作,动画啦,定位啦,css啦,事件啦,拖拽啦。其实也不用担心,即便使用了Ext.get()获得了
myDiv,还是可以直接访问document.getElementById()应该得到的部分,而且挺简单的,Ext.get().dom就可以了。
下面让偶们来看看这些基本的功能会是咋样呢?
-
先获得一个Element
var myDiv = Ext.get('myDiv');这里我们传入
的是一个id,你可以在html里看到<div
id="myDiv"></div>,然后我们用Ext.get('myDiv')从html里取得这个div,然后封装成
Element对象,现在这个对象就已经放到缓存中了,以后再用的时候就更快撒。
-
最吸引眼球的是动画效果,所以我们先动两下。
myDiv.hightlight();
红色高亮,然后渐退。
myDiv.addClass('red');添加自定义CSS类,css里有.red {background: red;}的定义,这样myDiv的背景直接变成了红色。
myDiv.center();
myDiv移动的窗口中间,包括垂直和竖直居中。
myDiv.setOpacity(.25);
使myDiv半透明
-
再看看怎么才好渐变动画
myDiv.setWidth(100);
这样可以直接设置myDiv的宽度,是没有渐变动画的。
myDiv.setWidth(100, true);
这样就打开了动画开关,如此简单就可以看到myDiv在动咯。
咱们还可以控制动画的动作,如下
myDiv.setWidth(100, {
duration: 2,
callback: this.highlight,
scope: this
});duration是间隔,数字越大移动越慢,callback说是动画完成后执行,但我没饰演出来,scope是callback执行的范围。
动画没法截图,还是看看lingo-sample/1.1.1/08-01.html,lingo-sample/2.0/08-01.html吧,四个按钮可以让myDiv在窗口里乱动,哈哈。
现在像css那样的批量选择方式真的很流行,ext里也没有落伍,一定会赶这个潮流。
-
选择所有<P>元素
现在我们要获得所有<P>元素,然后让他们都闪一下。
Ext.select("p").highlight(); -
按照css的class选择
首先我们有几个div,都使用class="red",然后我们让他们都闪一下,嘿嘿嘿~因为highlight()调用比较简单嘛。
Ext.select("div.red").highlight();
这种方式在prototype和jquery里已经发扬光大,而且还光大得很呢,你只需要按照css的选择方式,就可以得到你需要的集合。这方面其
实jquery颇为神奇,把select用的真是出神入化,可叹,它对js封装太狠,你用jquery的时候完全感觉不到自己是在用
javascript,这样接触原生方法的机会很少,等于把自己绑定到jquery上,最后权衡利弊,只好忍痛割爱了。
批量选择,见lingo-sample/1.1.1/08-02.html和lingo-sample/2.0/08-02.html。
8.3. DomHelper和Template动态生成html
用dom生成html元素一直是头疼的事情,以前都是听springside的教导,使用jsTemplate和Scriptaculous的组合。现在到了ext里面,我们就来看看它自己的实现。
使用DomHelper非常灵活,超简单就可以生成各种html片段,遇到复杂情况也要求助于它。
大概就是这么用
var list = Ext.DomHelper.append('parent', {tag: 'div', cls: 'red'});它就是向id=parent这个元素里,添加一个div元素。
按照文档里讲的,第二个参数{}里,除了四个特殊属性以外都会复制给新生成元素的属性,这四个特殊属性是
-
tag,告诉我们要生成一个什么标签,div啦,span啦,诸如此类。
千万别告诉我到现在你还不知道这些html标签,中间告诉你多少次先去学学html和css啦?你飞过来的不成?
-
cls,指的是<div class="red"></div>这种标签中的class属性,因为class是关键字,正常情况下应该写成className,可jack说className太长了,最后就变成cls了。-_-。
他就喜欢玩这个,把dataStore写成ds,DomHelper写成dh,Element写成el,ColumnModel写成cm,SelectionModel是sm。唉,发明的专业名词缩写好多呀。
-
children,用来指定子节点,它的值是一个数组,里边包含了更多节点。
-
html,对应innerHTML,觉得用children描述太烦琐,直接告诉节点里边的html内容也是一样。
DomHelper除了append还有几个方法,指定将新节点添加到什么位置。
为了比对效果,先放一个初始页面。
原始的html是这样的。一个div下有4个节点,其中第三个子节点下还有自己的子节点。
<div id="parent" style="border: 1px solid black;padding: 5px;margin: 5px;background: lightgray;">
<p id="child1">child1</p>
<p id="child2">child2</p>
<div id="child3">
<p id="child5">inner child</p>
</div>
<p id="child3">child4</p>
</div>
-
append是将新节点放到指定节点的最后。
Ext.DomHelper.append('parent', {tag: 'p', cls: 'red', html: 'append child'});
-
insertBefore,新节点插入到指定节点前面。
Ext.DomHelper.insertBefore('parent', {tag: 'p', cls: 'red', html: 'insert before child'})
-
insertAfter,新节点插入到指定节点后面。
Ext.DomHelper.insertAfter('parent', {tag: 'p', cls: 'red', html: 'insert before child'})
-
overwrite,会替换指定节点的innerHTML内容。
Ext.DomHelper.overwrite('child3', {tag: 'p', cls: 'red', html: 'overwrite child'[1] [2] 下一页
[新手指南]EXT开发的oa界面赏析 (佚名,03-06)
[新手指南][组图]Ext入门学习系列五--表格控件 (myext,12-07)上节学习了Ext面板控件,为后面的各个控件学习奠定基础,在此基础上本章将学习网络开发最期待的功能——表格控件。 我们都知道网络编程语言中,除了.net其他的基本没有提供网格控件,而最近的asp.net mvc也不倡议使用传统的服务器控件,绑定数据需要自己拼表格,所以兼容各种语言的表格控件就变得流行起……
[新手指南]阅读Ext学习Js(一)Core/Ext.js (佚名,03-06)
从Library的角度去看,Ext(喜欢中文的朋友可以到它的中文站看看)和Prototype JQuery YUI没有太大区别,但它有它的优点,完整的OO支持、成熟的通用widgets并支持主题、良好的扩展性、快速的更新发布新的widgates、社区也很热闹。最重要的是我……
[新手指南]架构分析(1)理解Ext.util.Event (佚名,03-06)
由于Ext2.0中所有的组件都是由Observable继承而来,理解Ext就需要先从Ext.util.Observable说起,而
Observable是对Event对象进行管理,从而理解Observable必须首先从Ext.util.Event说起。
……
[新手指南]调试利器:Firebug使用详解 (佚名,03-06)Javascript的调试,是开发Web应用尤其是AJAX应用很重要的一环,目前对Javascript进行调试的工具很多,我比较喜欢使用的是Firebug。Firebug是Joe Hewitt开发的一套与Firefox集成在一起的功能强大的web开发工具,可以实时编辑、调试和监测任何页面的CSS、H……