您的位置:首页 > Web前端 > extjs > 正文

extjs XTemplate的实例

更多 时间:2014-4-30 类别:Web前端 浏览量:3407

extjs XTemplate的实例

extjs XTemplate的实例

使用XTemplate一般会经历三个步骤


1、定义XTemplate对象,指定一段HTML代码作为模板;
2、指定XTemplate中定义的HTML应该放置的位置,并填充占位符信息;
3、编译XTemplate。

 

一、XTemplate实例准备

公共的html和用到的js数据贴在前面,后面的代码都要引用到。

1、html页面

  •  
  • HTML 代码   复制
  • 
        <h1>使用标签tpl和操作符for</h1>
            <li class="content" id="li1"></li>
        <h1>在子模板的范围内访问父元素对象</h1>
            <li class="content" id="li2"></li>
        <h1>数组元素索引和简单运算支持</h1>
            <li class="content" id="li3"></li>
        <h1>自动渲染单根数组</h1>
            <li class="content" id="li4"></li>
        <h1>条件逻辑判断</h1>
            <li class="content" id="li5"></li>
        <h1>即时执行任意的代码</h1>
            <li class="content" id="li6"></li>
        <h1>模板成员函数</h1>
            <li class="content" id="li7"></li>
    
    		
  • 2、定义的data数据源

  •  
  • JScript 代码   复制
  • 
    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: '游戏'
            }]
        };
     
    		
  •  

    二、XTemplate实例

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

    配合使用标签tpl和操作符for,可以循环输出张三的朋友

  •  
  • JScript 代码   复制
  •     
        //使用标签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("li1"), data);
    
    		
  • 输出效果

     

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

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

  •  
  • JScript 代码   复制
  •     
        //在子模板的范围内访问父元素对象
        var tp2 = new Ext.XTemplate(
         '<tpl for="friends">',
         '<p>{name}是{parent.name}的好友。</p>',
          '</tpl>'
        );
        tp2.overwrite(Ext.get("li2"), data);
    
    		
  • 输出效果 

     

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

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

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

     

    4、自动渲染单根数组

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

  •  
  • JScript 代码   复制
  • 
        //自动渲染单根数组
        var tp4 = new Ext.XTemplate(
         '喜好饮品:<tpl for="drinks">',
         ' {.}',
          '</tpl>'
        );
        tp4.overwrite(Ext.get("li4"), data);
    
    		
  • 输出效果

    喜好饮品:绿茶 红酒 咖啡

     

    5、条件逻辑判断

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

  •  
  • JScript 代码   复制
  • 
        //条件逻辑判断
        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("li5", data);
    
    		
  • 输出效果

     

    6、即时执行任意的代码

    在XTemplate中,{[ ... ]}范围内的内容会在模板作用域的范围下执行。这里有一些特殊的变量:


    values:当前作用域下的值。若想改变其中的值,你可以切换子模板的作用域。
    parent:父级模板的对象
    xindex:若是循环模板,这是当前循环的索引index(从1开始)。
    xcount:若是循环模板,这是循环的次数 。

  •  
  • JScript 代码   复制
  • 
        //即时执行任意的代码
        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("li6", data);
    
    		
  • 输出效果

     

    7、模板成员函数

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

  •  
  • JScript 代码   复制
  • 
        //模板成员函数
        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("li7"), data);
    
    		
  • 输出效果

     

    标签:XTemplate extjs