ExtJs中XTemplate使用(转)

时间:2022-10-29 19:46:52

转自http://www.studyofnet.com/news/408.html

本文导读:XTemplate是Ext.Template扩展的新类,它支持高级功能的模板类,如自动数组输出、条件判断、子模板、基本数学运行、特殊内建的模板变量,直接执行代码和更多的功能。XTemplate有些特殊的标签和内建的操作运算符,是模板创建时生成的,不属于API条目的一部分。下面介绍ExtJs中XTemplate使用方法

Ext.XTemplate 用法

 

1、 自动填充数组和作用域切换

 
HTML 代码    复制
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
          Ext.onReady(function(){
ExtJs中XTemplate使用(转)
              var tpl=new Ext.XTemplate(
ExtJs中XTemplate使用(转)
                 '<table border=1>',
ExtJs中XTemplate使用(转)
                  '<tr><td>姓名</td><td>年龄</td><td>操作</td></tr>',
ExtJs中XTemplate使用(转)
                  '<tpl for=".">',
ExtJs中XTemplate使用(转)
                  '<tr><td>{name}</td><td>{age}</td><td></td></tr>',
ExtJs中XTemplate使用(转)
                  '</tpl>',
ExtJs中XTemplate使用(转)
                  '</table>'
ExtJs中XTemplate使用(转)
                  ) ;
ExtJs中XTemplate使用(转)
              var tplData=[
ExtJs中XTemplate使用(转)
                  {name:'a',age:10},
ExtJs中XTemplate使用(转)
                  {name:'b',age:20},
ExtJs中XTemplate使用(转)
                  {name:'c',age:30},
ExtJs中XTemplate使用(转)
                  {name:'d',age:40},
ExtJs中XTemplate使用(转)
                  {name:'e',age:50},
ExtJs中XTemplate使用(转)
              ];
ExtJs中XTemplate使用(转)
              var panel=Ext.create('Ext.panel.Panel',{
ExtJs中XTemplate使用(转)
                  title:'XTmplate',
ExtJs中XTemplate使用(转)
                  width:1200,
ExtJs中XTemplate使用(转)
                  height:300,
ExtJs中XTemplate使用(转)
                  tpl:tpl,
ExtJs中XTemplate使用(转)
                  renderTo:Ext.getBody()
ExtJs中XTemplate使用(转)
              });
ExtJs中XTemplate使用(转)
              tpl.append('tmp',tplData);
ExtJs中XTemplate使用(转)
         });

代码中使用tpl 标签和for 运算符,本例中for运算符的值为“.”,表示指向当前对象,“..” 表示指向父对象,也可以直接写对象名,另外对数组的支持可以成批向模板中追加数据,

 

2、在子模板中访问父对象

 
HTML 代码    复制
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
         Ext.onReady(function(){
ExtJs中XTemplate使用(转)
              var tpl=new Ext.XTemplate(
ExtJs中XTemplate使用(转)
                 '<table border=1>',
ExtJs中XTemplate使用(转)
                  '<tr><td>姓名</td><td>年龄</td><td>COM</td></tr>',
ExtJs中XTemplate使用(转)
                  '<tpl for="emps">',
ExtJs中XTemplate使用(转)
                  '<tr><td>{name}</td><td>{age}</td><td>{parent.companyName}</td></tr>',
ExtJs中XTemplate使用(转)
                  '</tpl>',
ExtJs中XTemplate使用(转)
                  '</table>'
ExtJs中XTemplate使用(转)
                  ) ;
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
              var company={
ExtJs中XTemplate使用(转)
                  companyName:'IBM',
ExtJs中XTemplate使用(转)
                  emps:[
ExtJs中XTemplate使用(转)
                      {name:'a',age:10},
ExtJs中XTemplate使用(转)
                      {name:'b',age:20},
ExtJs中XTemplate使用(转)
                      {name:'c',age:30},
ExtJs中XTemplate使用(转)
                      {name:'d',age:40},
ExtJs中XTemplate使用(转)
                      {name:'e',age:50},
ExtJs中XTemplate使用(转)
                  ]
ExtJs中XTemplate使用(转)
              };    
ExtJs中XTemplate使用(转)
             tpl.append('tmp',company);
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
         });
ExtJs中XTemplate使用(转)

子对象中访问父对象的属性要使用“parent.”。

 

3、自动渲染简单数组

 
HTML 代码    复制
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
Ext.onReady(function(){
ExtJs中XTemplate使用(转)
              var tpl=new Ext.XTemplate(
ExtJs中XTemplate使用(转)
                 '<table border=1>',
ExtJs中XTemplate使用(转)
                  '<tr><td>姓名</td><td>年龄</td><td>COM</td></tr>',
ExtJs中XTemplate使用(转)
                  '<tpl for=".">',
ExtJs中XTemplate使用(转)
                  '<tr><td>{#}</td><td>{.}</td><td>{.}</td></tr>',
ExtJs中XTemplate使用(转)
                  '</tpl>',
ExtJs中XTemplate使用(转)
                  '</table>'
ExtJs中XTemplate使用(转)
                  ) ;
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
             var array=['a','b','c','d','e'];
ExtJs中XTemplate使用(转)
             tpl.append('tmp',array);

ExtJs中XTemplate使用(转)
         });
ExtJs中XTemplate使用(转)

{#} 代表行号,{.} 代表数组内容

 

4、使用基本逻辑判断

 
HTML 代码    复制
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
Ext.onReady(function(){
ExtJs中XTemplate使用(转)
              var tpl=new Ext.XTemplate(
ExtJs中XTemplate使用(转)
                 '<table border=1>',
ExtJs中XTemplate使用(转)
                  '<tr><td>姓名</td><td>年龄</td><td>COM</td></tr>',
ExtJs中XTemplate使用(转)
                  '<tpl for="emps">',
ExtJs中XTemplate使用(转)
                  '<tpl if="age &gt; 20">',
ExtJs中XTemplate使用(转)
                  '<tr><td>{#}</td><td>{name}</td><td>{age}</td></tr>',
ExtJs中XTemplate使用(转)
                  '</tpl>',
ExtJs中XTemplate使用(转)
                  '</tpl>',
ExtJs中XTemplate使用(转)
                  '</table>'
ExtJs中XTemplate使用(转)
                  ) ;
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
              var company={
ExtJs中XTemplate使用(转)
                  companyName:'IBM',
ExtJs中XTemplate使用(转)
                  emps:[
ExtJs中XTemplate使用(转)
                      {name:'a',age:10},
ExtJs中XTemplate使用(转)
                      {name:'b',age:20},
ExtJs中XTemplate使用(转)
                      {name:'c',age:30},
ExtJs中XTemplate使用(转)
                      {name:'d',age:40},
ExtJs中XTemplate使用(转)
                      {name:'e',age:50},
ExtJs中XTemplate使用(转)
                  ]
ExtJs中XTemplate使用(转)
              };    
ExtJs中XTemplate使用(转)
             tpl.append('tmp',company);
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
         });
ExtJs中XTemplate使用(转)

(&gt; 表示> , &lt; 表示<) 

 

5、在模板中执行任意代码

 
HTML 代码    复制
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
    Ext.onReady(function(){
ExtJs中XTemplate使用(转)
              var tpl=new Ext.XTemplate(
ExtJs中XTemplate使用(转)
                 '<table border=1 class=title>',
ExtJs中XTemplate使用(转)
                  '<tr><td>序号</td><td>姓名</td><td>工资</td><td>奖金</td></tr>',
ExtJs中XTemplate使用(转)
                  '<tpl for="emps">', 
ExtJs中XTemplate使用(转)
                      '<tr class="{[xindex % 2==0? "even":"odd" ]}">',
ExtJs中XTemplate使用(转)
                      '<td>{[xindex]}</td><td>{[values.name]}</td>',
ExtJs中XTemplate使用(转)
                      '<td>{[values.wage*parent.per]}</td>',
ExtJs中XTemplate使用(转)
                      '<td>{[Math.round(values.wage*parent.per/xcount)]}</td></tr>',
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
                  '</tpl>',
ExtJs中XTemplate使用(转)
                  '<tr><td>发薪时间</td><td colspan=3>{[fm.date(new Date,"Y年m月d日")]}</td></tr>',
ExtJs中XTemplate使用(转)
                  '<tr><td>工资总计</td><td colspan=3>  </td></tr>',
ExtJs中XTemplate使用(转)
                  '</table>'
ExtJs中XTemplate使用(转)
                  ) ;
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
             var tplData={
ExtJs中XTemplate使用(转)
                 per:0.9,
ExtJs中XTemplate使用(转)
                 emps:[
ExtJs中XTemplate使用(转)
                     {name:'a',wage:1000},
ExtJs中XTemplate使用(转)
                     {name:'b',wage:200},
ExtJs中XTemplate使用(转)
                     {name:'c',wage:100},
ExtJs中XTemplate使用(转)
                     {name:'d',wage:10},
ExtJs中XTemplate使用(转)
                     {name:'e',wage:897},
ExtJs中XTemplate使用(转)
                     {name:'f',wage:110}
ExtJs中XTemplate使用(转)
                 ]
ExtJs中XTemplate使用(转)
             };
ExtJs中XTemplate使用(转)
             tpl.append('tmp',tplData);
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
         });
ExtJs中XTemplate使用(转)

values : 当前作用域下的值对象,通过切换子模板的作用域可以改变其中的值

parent:父模板的值对象

xindex:循环模板的索引

xcount: 循环模板时候的总循环次数

 

6、在Extjs 组件中使用模板

 
HTML 代码    复制
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
    Ext.onReady(function(){
ExtJs中XTemplate使用(转)
              var tpl=new Ext.XTemplate( 
ExtJs中XTemplate使用(转)
                          '<div class="x-combo-list{[xindex%2==0?"even":"odd"]}">',
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
                          '{#}:{[this.check(values)]}</div>',
ExtJs中XTemplate使用(转)
                          {
ExtJs中XTemplate使用(转)
                              check:function(values){
ExtJs中XTemplate使用(转)
                                  if(values.value>2){
ExtJs中XTemplate使用(转)
                                      return "<font color=red>"+values.item+"</font>";
ExtJs中XTemplate使用(转)
                                  }else{
ExtJs中XTemplate使用(转)
                                      return "<font color=blue>"+values.item+"</font>";
ExtJs中XTemplate使用(转)
                                  }
ExtJs中XTemplate使用(转)
                              }
ExtJs中XTemplate使用(转)
                          }
ExtJs中XTemplate使用(转)
                  ) ;
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
             Ext.regModel('ItemInfo',{
ExtJs中XTemplate使用(转)
                 fields:['item','value']
ExtJs中XTemplate使用(转)
             })
ExtJs中XTemplate使用(转)
             var panel=Ext.create('Ext.panel.Panel',{
ExtJs中XTemplate使用(转)
                 title:'数组使用模板',
ExtJs中XTemplate使用(转)
                 renderTo:Ext.getBody(),
ExtJs中XTemplate使用(转)
                 height:500,
ExtJs中XTemplate使用(转)
                 width:1200,
ExtJs中XTemplate使用(转)
                 items:[
ExtJs中XTemplate使用(转)
                     {
ExtJs中XTemplate使用(转)
                         xtype:'combo',
ExtJs中XTemplate使用(转)
                         fieldLabel:'邮编',
ExtJs中XTemplate使用(转)
                         displayField:'item',
ExtJs中XTemplate使用(转)
                         valueField:'value',
ExtJs中XTemplate使用(转)
                         labelSeparator:':',
ExtJs中XTemplate使用(转)
                         listConfig:{
ExtJs中XTemplate使用(转)
                             itemTpl:tpl
ExtJs中XTemplate使用(转)
                         },
ExtJs中XTemplate使用(转)
                         editable:false,
ExtJs中XTemplate使用(转)
                         queryMode:'local',
ExtJs中XTemplate使用(转)
                         store:new Ext.data.Store({
ExtJs中XTemplate使用(转)
                             model:'ItemInfo',
ExtJs中XTemplate使用(转)
                             fields:['item','value'],
ExtJs中XTemplate使用(转)
                             data:[
ExtJs中XTemplate使用(转)
                                 {item:'a',value:1},
ExtJs中XTemplate使用(转)
                                 {item:'b',value:2},
ExtJs中XTemplate使用(转)
                                 {item:'c',value:3},
ExtJs中XTemplate使用(转)
                                 {item:'d',value:4},
ExtJs中XTemplate使用(转)
                                 {item:'e',value:5},
ExtJs中XTemplate使用(转)
                                 {item:'f',value:6},
ExtJs中XTemplate使用(转)
                             ]
ExtJs中XTemplate使用(转)
                         })
ExtJs中XTemplate使用(转)
                     }
ExtJs中XTemplate使用(转)
                 ]
ExtJs中XTemplate使用(转)
             });
ExtJs中XTemplate使用(转)
             tpl.append('tmp',tplData);
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
         });
ExtJs中XTemplate使用(转)

许多组件中都可以使用模板,他们一般表现为tpl配置项,通过为该配置提供相应的模板就可以改变组件默认的表现方式,可以进行一些个性化的定制。

 

7、模板格式化函数实例

var myTpl = new Ext.Template(
'<div>{content:ellipsis(50)}<br/><a href="{moreLink}">Read More</a></div>'
);
 

常用的模板格式化函数的列表

* ellipsis(length) - 对大于指定长度部分的字符串,进行裁剪,增加省略号(“...”)的显示。适用于只显示前N位的字符,然后提供详细页面的链接。
* undef -检查一个值是否为underfined,如果是的转换为空值
* htmlEncode - 转换(&, <, >, and ') 字符


* trim - 对一段文本的前后多余的空格裁剪
* substr(start, length) - 返回一个从指定位置开始的指定长度的子字符串。
* lowercase - 返回一个字符串,该字符串中的字母被转换为小写字母。
* uppercase - 返回一个字符串,该字符串中的字母被转换为大写字母。


* capitalize - 返回一个字符串,该字符串中的第一个字母转化为大写字母,剩余的为小写。
* usMoney - 格式化数字到美元货币。如:$10.97
* date[(format)] - 将一个日期解析成为一个特定格式模式的日期。如日期字符串不输入,默认为“月/日/年”
* stripTags - 剥去变量的所有HTML标签
 

 

亦可以创建自定义的格式化函数

具体做法是,在模板的实例上加入新的方法,继而在模板上调用,格式化的函数应该像这样的:{VARIABLE:this.<formatfunction></formatfunction>}"

这是一个简单的实例,对模板实例加入一个"parseJson "的新函数。

例如

 
JScript 代码    复制
ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转)
 var tplFun = new Ext.Template( 
ExtJs中XTemplate使用(转)
             '<table border=1 cellpadding=0 cellspacing = 0>', 
ExtJs中XTemplate使用(转)
             '<tr><td width=90 >姓名</td>', 
ExtJs中XTemplate使用(转)
             '<td width=120>{name}</td></tr>', 
ExtJs中XTemplate使用(转)
             '<tr><td width=90 >年龄</td>', 
ExtJs中XTemplate使用(转)
             '<td width=120>{age}</td></tr>', 
ExtJs中XTemplate使用(转)
             '<tr><td width=90 >身高</td>', 
ExtJs中XTemplate使用(转)
             '<td width=120>{stature:this.parseJson()}</td></tr>', 
ExtJs中XTemplate使用(转)
             '</table>' 
ExtJs中XTemplate使用(转)
         ); 
ExtJs中XTemplate使用(转)
         var data = { 
ExtJs中XTemplate使用(转)             name : 'tom', 
ExtJs中XTemplate使用(转)             age : 24, 
ExtJs中XTemplate使用(转)             stature : { ExtJs中XTemplate使用(转) num : 170, ExtJs中XTemplate使用(转) unit : '厘米' ExtJs中XTemplate使用(转) } ExtJs中XTemplate使用(转) } ExtJs中XTemplate使用(转)ExtJs中XTemplate使用(转) tplFun.parseJson = function(json){ ExtJs中XTemplate使用(转) return json.num + json.unit; ExtJs中XTemplate使用(转) } ExtJs中XTemplate使用(转) tplFun.append('tpl-table',data);