?
一、简介
元素操作通常是指标签的创建、定位、删除和样式定义等。
?
模板是Extjs中一个非常重要的基础功能,因为需要生成大量的HTML标签,使用模板绝对是不二的最佳选择,能带来非常棒的可读性。
?
二、Ext.DomHelper 类
Ext.DomHelper 类帮助我们使用javascript 清晰地生成HTML代码,他的使用非常灵活,我们应该找准他的主线,像庖丁解牛一样再慢慢剖开。
?
任何复杂的东西都有他存在的根基,根基就是精髓、是重心。过于浮躁搞不出什么深度,也容易让人丧失自信,掌握一套适合自己的学习方法非常必要,在学习中不断沉淀,完善自我——不仅仅是搞技术,其实任何事情都一样。只要付出了百分之一百的努力,就算没有成功也不会后悔。
?
1、insertHtml ( String where, HTMLElement el, String html ):在指定的元素上插件HTML片段。
参数:
where:插到哪里?可选值有:beforeBegin, afterBegin, beforeEnd, afterEnd
el:参照元素
html:插件的内容
示例:在页面上定义如下div:<div id="e">这是一个层</div>
Ext.DomHelper.insertHtml("afterBegin", Ext.get("e").dom, "<div> 中华人民共和国</div>")
?在页面上生成的结果如下:
<div id="e"> <div>中华人民共和国</div> 这是一个层 </div>
?通过修改第一个参数的值,可以总结出四个可选值的含义:
beforeBegin:插入起始标签之前
afterBegin:插入到起始标签之后,本示例就是这种情况
beforeEnd:插入到结束标签之前
afterEnd:插入到结束标签之后
?
?
2、下面的方法都差不多,我们通过一个示例来说明他们的用法。
insertBefore ( */ , Object/String o):新节点插入到指定节点之前;
insertAfter ( */ , Object/String o):新节点插入到指定节点之后;
insertFirst ( */ , Object/String o):新建节点并插入到指定节点作为第一个子节点;
append(*/ , Object/String o):新建节点并插入到指定节点作为最后一个子节点;
overwrite ( */ , Object/String o):替代指定节点内容;
参数:
*/:指定节点,类型可以为String/HTMLElement/Element
o:新节点,可以是dom对象(子孙)或裸HTML标记
示例:
HTML代码如下:
<div id="parent"> <div id="c1">第1 个孩子</div> <div id="c2">第2 个孩子</div> <div id="c3">第3 个孩子</div> <div id="c4">第4 个孩子</div> <div id="c5">第5 个孩子</div> </div>
?JS代码如下:
//在c2 之前插入div Ext.DomHelper.insertBefore("c2", "<div>c2-child-2</div>"); //在c2 之后插入div Ext.DomHelper.insertAfter("c2", {tag: "div", html: "c2-child"}); //将一个新节点作为parent的第一个子节点 Ext.DomHelper.insertFirst("parent", "<div>parent-first-child</div>"); //将c3 的内容更新 Ext.DomHelper.overwrite("c3", "There are new contents"); //将一个新节点作为parent的最后一个子节点 Ext.DomHelper.append("parent", {tag: "div", html: "parent-last-child"});
?结果:
<div id="parent"> <div>parent-first-child</div> <div id="c1">第1 个孩子</div> <div>c2-child-2</div> <div id="c2">第2 个孩子</div> <div>c2-child</div> <div id="c3">There are new contents</div> <div id="c4">第4 个孩子</div> <div id="c5">第5 个孩子</div> <div>parent-last-child</div> </div>
从例子中可以看出,新建的节点可以指定多种类型:即可以是一段HTML 标记,也可以是一个json对象,对于后者,可以通过cls属性来指定类选择器。?
?
?
三、Ext.XTemplate类
?
Templete 是模板之意,就是定义一段HTML 代码,并放置若干个{}作为占位符,运行时将数据填充到{}中去。
XTemplate和DomHelper 有很深的渊源,DomHelper 是XTemplate的小弟,DomHelper解决不了的事情,XTemplate一定可以。
使用XTemplate一般会经历三个步骤:
1、定义XTemplate对象,指定一段HTML代码作为模板;
2、指定XTemplate中定义的HTML应该放置的位置,并填充占位符信息;
3、编译XTemplate。
?
先看一个简单的例子来说明问题:
Ext.onReady(function(){ var xt = new Ext.XTemplate( "<table border={0} width={1}>", "<tr>", "<td>{2}</td>", "<td>{3}</td>", "<td>{4}</td>", "</tr>", "</table>" ); xt.append("xt", [1, 300, '单元格1', '单元格2', '单元格3']); xt.compile(); })
?页面如下:
<div id="xt"></div>
实例化XTemplate时,可以配置任意个参数,会自动连接到一起,这种写法似乎更方便更好读。append 方法同DomHelper 的append 方法,实际上还有insertBefore、insertAfter、insertFirst、overwrite 等方法,不同的是第二个参数,该参数是要填充到占位符中的数据,可以是数组,也可以是json对象。执行完之后得到如