Extjs 使用DomHelper 和 Template动态生产HTML的例子??

问题描述

Extjs 使用DomHelper 和 Template动态生产HTML的例子??

解决方案

DomHelper和Template动态生成html用dom生成html元素一直是头疼的事情,以前都是听springside的教导,使用jsTemplate和Scriptaculous的组合。现在到了ext里面,我们就来看看它自己的实现。 DomHelper用来生成小片段使用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'})闲来无聊,也看一看children这个属性的用法。Ext.DomHelper.append('parent', { tag: 'ul', style: 'background: white;list-style-type: disc;padding: 20px;', children: [ {tag: 'li', html: 'li1'}, {tag: 'li', html: 'li2'}, {tag: 'li', html: 'li3'} ]});这样就在parent里添加了一个ul标签,ul里包含三个li。呵呵~炫啊。代码见lingo-sample/1.1.1/08-03.html和lingo-sample/2.0/08-03.html。8.3.2. 批量生成还是需要Template模板场景模拟:目前有三男两女的json数据,要输出成html显示出来。var data = [ ['1','male','name1','descn1'], ['2','female','name2','descn2'], ['3','male','name3','descn3'], ['4','female','name4','descn4'], ['5','male','name5','descn5']];照搬grid时的测试数据呢,嘿嘿。只不过这次我们用的不再是ds,cm,grid的方式解析输出,而是用模板自己定义输出的格式。首先要定义一个模板var t = new Ext.Template( '<tr>', '<td>{0}</td>', '<td>{1}</td>', '<td>{2}</td>', '<td>{3}</td>', '</tr>');t.compile();索引从0开始,一共4个元素。然后在用的时候,这样子。for (var i = 0; i < data.length; i++) { t.append('some-element', data[]);}这段代码对应html中的一个表格,id="some-element"是tbody的id,我们使用模板为table增添了四行。<table border="1"> <tbody id="some-element"> <tr> <td>id</td> <td>sex</td> <td>name</td> <td>descn</td> </tr> </tbody></table>最终的显示结果就是包含五行数据的表格:定义模板的时候,可以使用Ext.util.Format里的工具方法,对数据进行格式化。常用的就是trim去掉收尾空格和ellipsis(10),ellipsis判断,当字符长度超过10时,自动截断字符串并在末尾添加省略号,很常用的功能哩。在模板里使用这些函数的话也很简单,不过我不说,你还是不知道,嘿嘿var t = new Ext.Template( '<tr>', '<td>{0}</td>', '<td>{1:trim}</td>', '<td>{2:trim}</td>', '<td>{3:ellipsis(10)}</td>', '</tr>');t.compile();如此这般,冒号加函数名称就可以实现我们的愿望了。可惜人算终不如天算,jack再神奇,也不可能考虑到所有的可能性,比如现在我们就想根据性别不同显示图片,jack怕是想破了脑袋,也想不出这种可能来,所以呢,他干脆不想了,而是给咱们留了一个自定义函数的接口。var t = new Ext.Template( '<tr>', '<td>{0}</td>', '<td>{1:this.renderSex}</td>', '<td>{2:trim}</td>', '<td>{3:ellipsis(10)}</td>', '</tr>');t.renderSex = function(value) { if (value == 'male') { return "<span style='color:red;font-weight:bold;'>红男</span><img src='user_male.png' />"; } else { return "<span style='color:green;font-weight:bold;'>绿女</span><img src='user_female.png' />"; }};t.compile();显示的红男绿女,就像我们预想的那样呈现在我们眼前了。

时间: 2024-10-31 08:31:22

Extjs 使用DomHelper 和 Template动态生产HTML的例子??的相关文章

Extjs读取xml文件生成动态表格和表单

最近开发项目,需要动态读取xml文件,生成Extjs界面,xml文件通过前台页面的按钮事件传进来,可以在网上查找[javascript 弹出子窗口]的相关文章</a> 获取弹出窗口url后的参数方法: // 获取url后的参数值 function getQueryStringValue(name) { var url = window.location.search; if (url.indexOf('?') < 0) { return null } var index = url.in

Extjs读取xml文件生成动态表格和表单(续)

很多人向我要[Extjs读取xml文件生成动态表格和表单]一文的源代码,故花了些时间将源代码整理出来,并重新编写此文,分享当时的技术思路. 需要的文件有: 1.html文件,此处以SASC.search.MtrUse.html为例 2.Extjs相关文件,见SASC.search.MtrUse.html文件中的引用 3.工具类,DomUtils.js 4.核心js类:SASC.extjs.search.MtrUse.js 5.java代码 详细html和js代码见相关文件,这里先描述思路. 首先

extjs grid 的header可以动态设置吗?

问题描述 var store = new Ext.data.ArrayStore({fields: [{ name: 'value'}, {name: 'text'}]}); var data = [['1', 'One'], ['2', 'Two'], ['3', 'Three'], ['4', 'Four'], ['5', 'Five'], ['6', 'Six'], ['7', 'Seven'], ['8', 'Eight'], ['9', 'Nine'], ['10', 'Ten'],

extjs 列表框(multiselect)的动态添加列表项的方法_extjs

因为它这个是创建时自动加载的ArrayStore(关键字是:data: ds),没有动态增加的示例,但我们的项目需要有三个列表框,并且后两个的内容要根据第一个列表框内容动态的加载,因此要在选择第一个列表框的内容时,动态填充后两个的内容.我比较佩服exjts的示例写作人员,这些应该在示例中体现的功能,他们都没有写到,包括之前的2.2版本的示例,网上也没有搜索到,害我找了一天如何动态控制列表数据的功能.首先说明一下,我的方法也不是官方的方法,只是自己灵机一动想到的,下面是动态增加列表项的方法. 在方

extjs中grid中嵌入动态combobox的应用_extjs

拿combobox的数据 复制代码 代码如下: comboDS = new Ext.data.JsonStore({ url : 'test.do', fields : [{ name : 'id' }, { name : 'display' }] }); combobox定义 combobox 中的id必须要有,后面要跟据id取combobox值. 复制代码 代码如下: var comboBox = new Ext.form.ComboBox({ id : "cb", //必须有 t

动态广告管理程序制作例子

程序|动态|广告 By Wayne Berry This IssueMany sites that are content specific depend on banner advertisement for revenue. Such is the case for 15 Seconds. A banner is displayed at the top of the page for every page viewed. Clients usually buy a set number o

安卓开发之ListView(HorizontalListView)横向动态加载数据例子

这个自定义的控件可以实现横向的动态数据加载,话不多说,下面上代码.(使用方法和普通listview一致) 1.在布局里用HorizontalScrollView包含一个ListView: 2.利用GridView,把它的行数设为1行: HorizontalListView.java: package cn.zmit.xianneng.widget; import java.util.LinkedList; import java.util.Queue; import android.conten

js 动态文字滚动的例子_javascript技巧

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>这是一个动态Java

三层动态下来菜单的例子,供大家参考!

写了一个三层动态读取文件夹的下拉菜单的例子,供大家参考!<%'得到文件夹路径.注意设置文件名字urlpath=server.mappath("ook")set fsoBrowse=CreateObject("Scripting.FileSystemObject")'设置文件夹路径if Request("path")="" thenlpath=urlpath&""elselpath=Reques