ExtJs4 笔记(4) Ext.XTemplate 模板

摘要:
本文将详细分析ExtJs模板的使用','');tp2.overwrite;查看输出效果:3。数组元素索引和简单操作支持在循环访问数组时通过{#}获取索引信息。基本数据也可以支持简单操作:[Js]1234567//数组元素索引和简单操作支持vartp3=newExt.XTemplate;tp3.overwrite;查看输出效果:4。单根数组的自动呈现可以通过{.}自动呈现没有键值对的单根数组,例如:[Js]1234567//单根数组自动呈现vartp4=newExt.XTemplate;tp4.覆盖;检查输出效果:5。条件逻辑判断可以与标记tpl和运算符一起使用,如果要进行一些简单的逻辑判断。注意,没有else运算符。你可以写两个if。
ExtJs4 笔记(4) Ext.XTemplate 模板

摘自:http://www.cnblogs.com/lipan/

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

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

[html]

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

定义data数据源:

[Js]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vardata = {
    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]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//使用标签tpl和操作符for
vartpl = newExt.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);

查看输出效果:

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

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

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

[Js]

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

查看输出效果:

ExtJs4 笔记(4) Ext.XTemplate 模板第2张

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

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

[Js]

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

查看输出效果:

ExtJs4 笔记(4) Ext.XTemplate 模板第3张

四、自动渲染单根数组

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

[Js]

1
2
3
4
5
6
7
//自动渲染单根数组
vartp4 = newExt.XTemplate(
 '喜好饮品:<tpl for="drinks">',
 ' {.}',
  '</tpl>'
);
tp4.overwrite(Ext.get("div4"), data);

查看输出效果:

ExtJs4 笔记(4) Ext.XTemplate 模板第4张

五、条件逻辑判断

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

[Js]

1
2
3
4
5
6
7
8
9
10
11
//条件逻辑判断
vartp5 = newExt.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);

查看输出效果:

ExtJs4 笔记(4) Ext.XTemplate 模板第5张

六、即时执行任意的代码

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

[Js]

1
2
3
4
5
6
7
8
9
10
11
//即时执行任意的代码
vartp6 = newExt.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);

查看输出效果:

ExtJs4 笔记(4) Ext.XTemplate 模板第6张

七、模板成员函数

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

[Js]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//模板成员函数
vartp7 = newExt.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) {
         returnlike == '鲜花';
     },
     isMen: function(like) {
         returnlike != "鲜花";
     },
     isChild: function(age) {
         returnage < 18;
     }
 }
);
tp7.overwrite(Ext.get("div7"), data);

查看输出效果:

ExtJs4 笔记(4) Ext.XTemplate 模板第7张

打开新标签

var EditTpl = new Ext.XTemplate(
        '<a href=javascript:TranToDetial("/Edm/EdmGroupEmail","{group_id}")>' + "{group_total_email}" + '</a> '
    );
Ext.onReady(function () {
    var EdmGroup = Ext.create('Ext.grid.Panel', {
        id: 'EdmGroup',
        store: EdmGroupStore,
        document.documentElement.clientWidth,
        columnLines: true,
        frame: true,
        columns: [
            { header: "名單編號", dataIndex: 'group_id', 150, align: 'center' },
            { header: "名單名稱", dataIndex: 'group_name', 150, align: 'center' },
            {
                header: "名單數", dataIndex: 'group_total_email', 120, align: 'center', id: 'security_group_total_email',hidden:true,
                xtype: 'templatecolumn', tpl: EditTpl
            },

出处:[Lipan]http://www.cnblogs.com/lipan/

 

免责声明:文章转载自《ExtJs4 笔记(4) Ext.XTemplate 模板》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VMware 虚拟机网络 组网问题SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

5+ App开发入门指南

HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML、JS、CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实现与原生App同样强大的功能和性能。 HTML5 Plus规范 通过HTML5开发移动App时,会发现HTML5很多能力不具备。为弥补HTML5能力的不足,在...

C# 集合之Dictionary详解

开讲。 我们知道Dictionary的最大特点就是可以通过任意类型的key寻找值。而且是通过索引,速度极快。 该特点主要意义:数组能通过索引快速寻址,其他的集合基本都是以此为基础进行扩展而已。 但其索引值只能是int,某些情境下就显出Dictionary的便利性了。 那么问题就来了--C#是怎么做的呢,能使其做到泛型索引。 我们关注圈中的内容,这是Dic...

js实现复制内容到剪切板,兼容pc和手机端,支持Safari浏览器

Javascript原生有一些事件:copy、paste、cut, 这些事件可以作用的目标元素: 能获得焦点的元素 (如contentEditable内容能编辑或者可以选中的元素),或者是<body> <div id="cardList">   <div class="btn">点击我,复制我</div>...

web优化之js动态合并 动态压缩 去掉js重复引用 js缓存 js延迟加载

做web前段也有一段时间了,对于web中js文件的加载有些体会想跟大家一起分享一下。 1.首先说说js文件的合并和压缩吧 为了便于集中式管理js的合并和压缩我们创建一个Js.ashx文件来专门处理合并压缩,这里我们借用Yahoo.Yui.Compressor工具来压缩我们的js文件 代码如下: public classJs : IHttpHandler...

JS实现队列

JS实现队列: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头 链式队列的实现 function LinkedQueue() { let Node = function (ele)...

ecshop 二次开发 函数列表大全

最近进行ecshop的二次开发,整理了一部分的函数,另外在ecshop论坛上面也发现了很多函数说明,整理汇总如下,供大家参考。 所有函数功能说明: lib_time.phpgmtime() P: 获得当前格林威治时间的时间戳 /$0server_timezone() P: 获得服务器的时区 /$0local_mktime($hour = NULL , $mi...