作者:李盼(Lipan)
出处:[Lipan]http://www.cnblogs.com/lipan/
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。

本篇将涉及到ExtJs中一个重要的概念,模板。话说Razor很神奇,但是我个人不是很喜欢那种html混编C#的方式,仿佛又回到了asp的时 代。ExtJs的模板同样也可以组织生成灵活的html,而且代码和html有效的分离。本文将细细分析ExtJs模板的用法。

行文之前我先把公共的html和用到的js数据贴在前面,后面的代码都要引用到。

[html]

    <h1>使用标签tpl和操作符for</h1>
<div class="content" id="div1"></div>
<h1>在子模板的范围内访问父元素对象</h1>
<div class="content" id="div2"></div>
<h1>数组元素索引和简单运算支持</h1>
<div class="content" id="div3"></div>
<h1>自动渲染单根数组</h1>
<div class="content" id="div4"></div>
<h1>条件逻辑判断</h1>
<div class="content" id="div5"></div>
<h1>即时执行任意的代码</h1>
<div class="content" id="div6"></div>
<h1>模板成员函数</h1>
<div class="content" id="div7"></div>

定义data数据源:

[Js]

    var data = {
name: '张三',
job: 'C#程序员',
company: '惠普',
email: 'zhangsan@163.com',
address: '武汉市洪山区光谷软件园',
city: '武汉',
state: '正常',
zip: '430000',
drinks: ['绿茶', '红酒', '咖啡'],
friends: [{
name: '李四',
age: 6,
like: '鲜花'
}, {
name: '王五',
age: 26,
like: '足球'
}, {
name: '赵六',
age: 81,
like: '游戏'
}]
};

一、使用标签tpl和操作符for

现在我要把data数据源展示到页面上,并组织到table里面。但是这个html不是写死的,而是通过模板生成。配合使用标签tpl和操作符for,可以循环输出张三的朋友:

[Js]

    //使用标签tpl和操作符for
var tpl = new Ext.XTemplate(
'<table cellpadding=0 cellspacing=0 border=1 width=400px>',
'<tr><td colspan=2 align=center><b>{name}的个人资料</b></td></tr>',
'<tr><td>姓名:</td><td>{name}</td></tr>',
'<tr><td>工作:</td><td>{job}</td></tr>',
'<tr><td>公司:</td><td>{company}</td></tr>',
'<tr><td>地址:</td><td>{address}</td></tr>',
'<tr><td>喜好饮品:</td><td>{drinks}</td></tr>',
'<tr><td>他的好友:</td><td>',
'<tpl for="friends">',
'<p>{name}:{age}岁</p>',
'</tpl></td></tr>',
'</table>'
);
tpl.overwrite(Ext.get("div1"), data);

查看输出效果:

二、在子模板的范围内访问父元素对象

当我们在遍历输出张三的朋友时,需要再次访问张三的信息,怎么做呢,看如下js:

[Js]

    //在子模板的范围内访问父元素对象
var tp2 = new Ext.XTemplate(
'<tpl for="friends">',
'<p>{name}是{parent.name}的好友。</p>',
'</tpl>'
);
tp2.overwrite(Ext.get("div2"), data);

查看输出效果:

三、数组元素索引和简单运算支持

在循环访问数组时,可以通过{#}获取索引信息,基础数据还可以支持简单运算:

[Js]

    //数组元素索引和简单运算支持
var tp3 = new Ext.XTemplate(
'<tpl for="friends">',
'<p>{#}、一年后,{name}的年龄是:{age+1}</p>',
'</tpl>'
);
tp3.overwrite(Ext.get("div3"), data);

查看输出效果:

四、自动渲染单根数组

通过{.}可以自动渲染没有键值对的单根数组,示例如下:

[Js]

    //自动渲染单根数组
var tp4 = new Ext.XTemplate(
'喜好饮品:<tpl for="drinks">',
' {.}',
'</tpl>'
);
tp4.overwrite(Ext.get("div4"), data);

查看输出效果:

五、条件逻辑判断

配合标签tpl和操作符if的使用,可以做一些简单的逻辑判断,注意没有else操作符,你可以写两个if来代替。另外大于,小于符号要经过html编码,不能直接写出。

[Js]

    //条件逻辑判断
var tp5 = new Ext.XTemplate(
'<table cellpadding=0 cellspacing=0 border=1 width=400px>',
'<tr><td>他的好友:</td><td>',
'<tpl for="friends">',
'<tpl if="age < 18"><p>{name}:[未成年]</p></tpl>',
'<tpl if="age >= 18"><p>{name}:{age}岁</p></tpl>',
'</tpl></td></tr>',
'</table>'
);
tp5.overwrite("div5", data);

查看输出效果:

六、即时执行任意的代码

在XTemplate中,{[ ... ]}范围内的内容会在模板作用域的范围下执行。这里有一些特殊的变量:
values:当前作用域下的值。若想改变其中的值,你可以切换子模板的作用域。
parent:父级模板的对象
xindex:若是循环模板,这是当前循环的索引index(从1开始)。
xcount:若是循环模板,这是循环的次数 。

[Js]

    //即时执行任意的代码
var tp6 = new Ext.XTemplate(
'当前日期:{[new Date().toLocaleDateString()]}',
'<table cellpadding=0 cellspacing=0 border=1 width=400px>',
'<tpl for="friends"><tr>',
'<tpl if="xindex == 1"><td rowspan={[xcount]}>他的好友:</td></tpl>',
'<td>{["姓名:" + values.name + ",年龄:" + values.age + ","+ (values.like=="鲜花"?"是个女孩":"是个男孩")]}</td>',
'</tr></tpl>',
'</table>'
);
tp6.overwrite("div6", data);

查看输出效果:

七、模板成员函数

在模板中还可以调用自定义函数,这些函数通过配置传入。相关写法如下:

[Js]

    //模板成员函数
var tp7 = new Ext.XTemplate(
'<b>他的好友:</b><tpl for="friends"><p>',
'<tpl if="this.isWoman(like)">{name}:是个女性。</tpl>',
'<tpl if="this.isMen(like)">{name}:是个男性。</tpl>',
'<tpl if="this.isChild(age)">{name}:是个小孩。</tpl>',
'</p></tpl>', {
isWoman: function (like) {
return like == '鲜花';
},
isMen: function (like) {
return like != "鲜花";
},
isChild: function (age) {
return age < 18;
}
}
);
tp7.overwrite(Ext.get("div7"), data);

查看输出效果:

[转载]ExtJs4 笔记(4) Ext.XTemplate 模板的更多相关文章

  1. ExtJs4 笔记(4) Ext.XTemplate 模板

    ExtJs4 笔记(4) Ext.XTemplate 模板 摘自:http://www.cnblogs.com/lipan/ 本篇将涉及到ExtJs中一个重要的概念,模板.话说Razor很神奇,但是我 ...

  2. [转载]ExtJs4 笔记(11) Ext.ListView、Ext.view.View 数据视图

    本篇介绍两个用来展示数据的容器控件,分别是Ext.ListView和Ext.view.View.Ext.ListView就是大名鼎鼎的 Ext GridPanel的前身,不过现在的Ext4已经将它整合 ...

  3. ExtJs之Ext.XTemplate:模板成员函数

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  4. [转载]ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  5. [转载]ExtJs4 笔记(10) Ext.tab.Panel 选项卡

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  6. [转载]ExtJs4 笔记(7) Ext.tip.ToolTip 提示

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  7. [转载]ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  8. [转载]ExtJs4 笔记(8) Ext.slider 滚轴控件、 Ext.ProgressBar 进度条控件、 Ext.Editor 编辑控件

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  9. [转载]ExtJs4 笔记(6) Ext.MessageBox 消息对话框

    作者:李盼(Lipan) 出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法 ...

随机推荐

  1. 基于进程的Quartz.NET管理系统QuartzService(一)

    需求 在处理定时任务大家可能都用过Quartz.NET,但在生产环境中大家肯定也遇到过如下的问题: 发布的时候需要停掉所有的Job,再整个一起打包发布 没有管理界面(其实在github也有几个这方面的 ...

  2. windows下使用makecert命令生成自签名证书

    1.makecert命令路径 C:\Program Files (x86)\Windows Kits\8.1\bin\x64 2.生成一个自签名证书 makecert -r -pe -n " ...

  3. MySQL Fabric 分片性能测试

    苦逼的人生,开始了新一轮调研.这次是上面要看 MySQL Fabric 分片性能,好吧,开搞. 1 啥是 MySQL Fabric 其实就是一个Python进程和应用端的Connector的组合.来一 ...

  4. C# Sqlite事务

    在 C#中执行Sqlite数据库事务有两种方式:Sql代码和C#代码 1.Sql代码: BEGIN… COMMIT /ROLLBACK 2.C#代码: using (SQLiteConnection ...

  5. js中的排序

    不靠谱的sort() 众所周知,js中的sort()排序是按字母表顺序排序的,这就导致如下现象: var a = [9,60,111,55,8,7777]; a.sort(); alert(a); / ...

  6. COMMIT WORK AND WAIT 是在WAIT什么

    wait 还是不wait,这是个问题.       这是同步更新还是异步更新的问题:如果是只commit work,是异步更新,触发注册在当前SAP LUW中所有数据更新动作,数据更新动作由SAP的更 ...

  7. SharePoint 2013 - User

    1. 在SharePoint 2010中,可以搜索出NT AUTHORITY\authenticated users,但在SharePoint 2013中,不能搜索出,需要手动写入全名后进行验证: 2 ...

  8. 学习C语言常用的几个网站

    今天整理资料,发现了以前学习C语言时,常用到的几个网站: 1.http://ganquan.info/standard-c/   改网站包含了C语言标准版的15个头文件解释以及函数,137个函数和演示 ...

  9. Android 之 json数据的解析(jsonReader)

    json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...

  10. win7下安装tomcat

    安装个tomcat都一波三折,网上资料安装方法参差不齐,看多了反而晕,记录下自己安装的过程,便于以后翻阅. 选择哪个版本? tomcat 8要求JDK7以上, 想安装8的需要先确认下自己JDK版本(j ...