`
lqy_2019
  • 浏览: 18349 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Ext.XTemplate

阅读更多
1、 自动填充数组并切换作用域

使用 ”<tpl>” 标签和 ”for” 操作符,你可以把作用域切换到 ”for” 所指向的对象,然后访问这个对象的成员来组装模板。如果 ”for” 循环中的变量是一个数组,它将被自动填充,对于数组中的每个元素,重复 ”<tpl>” 标签中的模板 ( 定义 ) 块 ( 来自动填充 ) 。(译者注:这句的意思是,如果 for 循环里面指定的对象是个数组,就会自动解析这个数组,然后使用数组中的每个元素来填充模板。)

 

var tpl = new Ext.XTemplate(

    '<p>Name: {name}</p>',

    '<p>Title: {title}</p>',

    '<p>Company: {company}</p>',

    '<p>Kids: ',

    '<tpl for="kids">',

        '<p>{name}</p>',

    '</tpl></p>'

);

tpl.overwrite(panel.body, data);

 

2、 从内部的子模板作用域访问父对象

当处理一个子模板时,例如当迭代 ”child” 这个数组的时候,你可以通过 ”parent” 关键字来访问父对象的成员。

var tpl = new Ext.XTemplate(

    '<p>Name: {name}</p>',

    '<p>Kids: ',

    '<tpl for="kids">',

        '<tpl if="age > 1">',

            '<p>{name}</p>',

             '<p>Dad: {parent.name}</p>',

        '</tpl>',

    '</tpl></p>'

);

tpl.overwrite(panel.body, data);

 

3、 数组元素序号和基本的匹配支持

当处理数组的时候,特殊的变量 ”{#}” 可以提供数组当前的 index+1 (这个数据)。模板也支持基本的数学运算符 ”+” 、 ”-” 、 ”*” 、 ”/” ,这些操作符可以直接在数字型的数据值上使用。

var tpl = new Ext.XTemplate(

    '<p>Name: {name}</p>',

    '<p>Kids: ',

    '<tpl for="kids">',

        '<tpl if="age > 1">',

            '<p>{#}: {name}</p>',  // <-- Auto-number each item

            '<p>In 5 Years: {age+5}</p>',  // <-- Basic math

            '<p>Dad: {parent.name}</p>',

        '</tpl>',

    '</tpl></p>'

);

tpl.overwrite(panel.body, data);

  

4、 自动渲染普通的(译者注:数组元素不是对象,是基本的 String 、 Number )数组

普通的数组,包含的元素(不是对象型的)可以使用特殊的变量 ”{.}” 在一个循环体内自动渲染。这个变量用来描述数组当前索引中的值。

var tpl = new Ext.XTemplate(

    '<p>{name}\'s favorite beverages:</p>',

    '<tpl for="drinks">',

       '<div> - {.}</div>',

    '</tpl>'

);

tpl.overwrite(panel.body, data);


5、 基本的条件匹配逻辑

使用 ”<tpl>” 标签和 ”if” 操作符,你可以提供条件检查,来决定是否渲染模板中指定的部分。注意:没有 ”else” 操作符 --- 如果需要,你必须使用两个条件不同的 ”if” 。这里需要编码好的(译者注:意指 URL 转义字符 )符号,就像以下的示例一样 :

var tpl = new Ext.XTemplate(

    '<p>Name: {name}</p>',

    '<p>Kids: ',

    '<tpl for="kids">',

         '<tpl if="age &gt; 1">',// ß 注意: ”>” 号是编码好的。

            '<p>{name}</p>',

        '</tpl>',

    '</tpl></p>'

);

tpl.overwrite(panel.body, data);

 


6、 执行任意内嵌代码的能力

在一个模板里面,位于 ”{[…]}” 号中的任何东西都被当作是需要在模板作用域内被执行的代码。在这段代码里面,有一些特殊的变量可以使用:

“ values ” :当前作用域下的值。如果你使用子模板来改变作用域,你就可以改变 ”values” 的值。

“ parent ” :“祖先”模板的作用域(或值)。

“ xindex ” :如果你在一个循环的模板里面,这个值表示你当前所在的“第几次”循环(从 1 开始)。

“ xcount ” :如果你在一个循环的模板里面,这个值表示你正在迭代的数组的总长度。

“ fm ” : Ext.util.Format 对象的别名。

var tpl = new Ext.XTemplate(

    '<p>Name: {name}</p>',

    '<p>Company: {[values.company.toUpperCase() + ", " + values.title]}</p>',

    '<p>Kids: ',

    '<tpl for="kids">',

       '<div class="{[xindex % 2 === 0 ? "even" : "odd"]}">',

        '{name}',

        '</div>',

    '</tpl></p>'

);

tpl.overwrite(panel.body, data);

(译者注:使用myext 放出来的 Ext2.0 API 的人请注意,这份 API 上的这段示例代码有错误,无法运行。笔者查阅了原始的文档,发现和他们发出来的不一致。 )

(译者注:运行效果图如下。





 

7、 模板的成员函数

可以在 config 对象中定义一个或多个成员函数传递给 XTemplate 的构造函数,来进行更复杂的处理。

var tpl = new Ext.XTemplate(

    '<p>Name: {name}</p>',

    '<p>Kids: ',

    '<tpl for="kids">',

        '<tpl if="this.isGirl(name)">',

            '<p>Girl: {name} - {age}</p>',

        '</tpl>',

        '<tpl if="this.isGirl(name) == false">',

            '<p>Boy: {name} - {age}</p>',

        '</tpl>',

        '<tpl if="this.isBaby(age)">',

            '<p>{name} is a baby!</p>',

         '</tpl>',

    '</tpl></p>', {

     isGirl: function(name){

         return name == 'Sara Grace';

     },

     isBaby: function(age){

        return age < 1;

     }

});

tpl.overwrite(panel.body, data);

 

总结:

         请注意模板的第六和第七个特性,这两个特性使得我们在实现处理数据时的一些特殊的要求变得轻而易举。而且这种写法代码清晰,可以说是相当优雅。

有了这七个示例给出来的 Demo ,对于模板的使用应该就比较顺畅了。下一篇,我们就来分析模板 XTemplate 到底是怎么实现的,它的运行机制是什么。

分享到:
评论
1 楼 andy_long 2013-07-26  
eh[i][/i]j
[flash=200,200][flash=200,200][flash=200,200][url][url][url][url][url][img][img][list]
[*][list]
[*][*]
[flash=200,200][flash=200,200][flash=200,200][url][url][img][list]
[*][*][*]
引用
引用
[u][b][/b][/u]
  • [*][/list][/img][/url][/url][/flash][/flash][/flash]
  • [*][/list]
    [/list][/img][/img][/url][/url][/url][/url][/url][/flash][/flash][/flash]
    |||||||||||||||||||||||
    |||||||||||
    ||||||||||
    ||||||||||
    |||||||||
    |||||||||
    ||||||||
    ||||||||
    |||||||
    |||||||
    ||||||
    ||||||
    |||||
    |||||
    ||||
    ||||
    |||
    |||
    ||
    ||
    |
    |
        

    相关推荐

      一个简单的Ext.XTemplate的实例代码

      把省份与城市以树的形式输出的Ext.XTemplate的实例代码,需要的朋友可以参考下

      EXT核心API详解

      23、Ext.XTemplate类 ………………… 21 24、Ext.data.Connection类 ……………… 22 25、Ext.Ajax类 ………………………… 22 26、Ext.data.Record类 ………………… 23 27、Ext.data.DataProxy类 …………… 24 28...

      ExtJs入门实例

      11. ExtJs2.0学习系列(11)--Ext.XTemplate 12. ExtJs2.0学习系列(12)--Ext.TreePanel之第一式 13. ExtJs2.0学习系列(13)--Ext.TreePanel之第二式 14. ExtJs2.0学习系列(14)--Ext.TreePanel之第三式(可增删改的树) 15...

      Ext_3.2模板的使用示例

      本人觉得Ext.Template和Ext.XTemplate模板类非常类似.Net的母板页,或者非常类似于JSP技术中jstl标准标签和EL表达式功能;但是它是一个客户端的技术。 阅读目标:需要使用模板方式来开发web应用的人员。 前置条件:...

      ExtJS入门教程(超级详细)

      23、Ext.XTemplate类 ………………… 21 24、Ext.data.Connection类 ……………… 22 25、Ext.Ajax类 ………………………… 22 26、Ext.data.Record类 ………………… 23 27、Ext.data.DataProxy类 …………… 24 28...

      ExtJs4_笔记.docx

      第四章 Ext.XTemplate 模板 31 一、使用标签tpl和操作符for 33 二、在子模板的范围内访问父元素对象 34 三、数组元素索引和简单运算支持 34 四、自动渲染单根数组 35 五、条件逻辑判断 36 六、即时执行任意的代码 36...

      Ext Js权威指南(.zip.001

      8.1.4 超级模板:ext.xtemplate(包括ext.xtemplateparser和ext.xtemplatecompiler) / 393 8.1.5 模板的方法 / 396 8.2 组件的基础知识 / 396 8.2.1 概述 / 396 8.2.2 组件类的整体架构 / 397 8.2.3 布局类的...

      精通JS脚本之ExtJS框架.part1.rar

      6.5.2 Ext.XTemplate 第7章 设计表单类布局 7.1 Form表单简介 7.1.1 Form表单的基本配置 7.1.2 ExtJS对Form表单的封装 7.2 ExtJS的表单组件 7.2.1 文本输入控件Ext.form.TextField 7.2.2 多行文本输入控件Ext...

      精通JS脚本之ExtJS框架.part2.rar

      6.5.2 Ext.XTemplate 第7章 设计表单类布局 7.1 Form表单简介 7.1.1 Form表单的基本配置 7.1.2 ExtJS对Form表单的封装 7.2 ExtJS的表单组件 7.2.1 文本输入控件Ext.form.TextField 7.2.2 多行文本输入控件Ext...

      基于extjs的.NET3.5控件Coolite 1.0.0.34580(Preview预览版)

      1. Renamed Coolite.Ext.Web project to Ext.Net 2. Renamed Coolite.Examples project to Ext.Net.Examples 3. Renamed Coolite.Ext.UX project to Ext.Net.UX 4. Renamed Coolite.EmbeddedResourceBuilder ...

      轻松搞定Extjs_原创

      三、Ext.XTemplate 38 四、小结 39 第七章:格式化 40 一、用户需要优秀体验的内容 40 二、Ext.util.Format类 40 三、再谈XTemplete 44 四、如果连Format都不能满足XTemplete的需要呢? 45 五、小结 45 第八章:...

      ext xtemplate 实例 利用模板 表格合并行 表格分组

      利用模板(xtemplate)表格合并行 简单实现表格分组,单元格行的合并。

      Ext深入浅出 数据传输

      11.2.5 复杂模板XTemplate..........279 11.3 用Ext.Utils.CSS切换主题..............281 11.4 悬停提示.................................................282 11.4.1 初始化........................................

      Ext 开发指南 学习资料

      8.3.3. 醍醐灌顶,功能强劲的模板引擎XTemplate。 8.4. Ext.data命名空间 8.4.1. proxy系列 8.4.1.1. 人畜无害MemoryProxy 8.4.1.2. 常规武器HttpProxy 8.4.1.3. 洲际导弹ScriptTagProxy 8.4.2. reader系列 8.4.2.1....

      extjsExtjs学习笔记——多个图片XTemplate排版居中,自动缩放处理

      该资源通过一个代码实例授予对Ext处理图片的居中、排版问题陌生的开发人员。适用于初学者和有一定开发基础的人群,文件下载下来就可以用。

      Ext 学习中文手册

      XTemplate 83 DataView 84 其它新组件 84 EXT2简介 85 下载Ext 85 开始! 85 Element:Ext的核心 86 获取多个DOM的节点 87 响应事件 87 使用Widgets 88 編輯 使用Ajax 91 TabPanel基础 94 Step 1: 创建 HTML 骨架 94...

      ExtJS 核心的抽奖程序(共享源代码)

      最近公司举行15周年司庆晚会,公司首改以往丑旧的抽奖模式。领导要求我开发一套抽奖程序。 简单需求如下: 1.... 2.... 3.... 4.... 5.... 6.... 7....不过多亏ExtJS给我解决了各种难题,让我很快开发出来这套抽奖程序,现在程序圆满...

      Ext 将grid渲染到combox

      有时候我们需要在combo中渲染grid,这时候我们可以通过ext的模板xtemplate来实现此功能。

      EXT 中文帮助手册

      组件模型 Component Model 74 容器模型Container Model 78 布局 Layouts 80 Grid 82 XTemplate 83 DataView 84 其它新组件 84 EXT2简介 85 下载Ext 85 开始! 85 Element:Ext的...

    Global site tag (gtag.js) - Google Analytics