zoukankan      html  css  js  c++  java
  • ExtJs2.0学习系列(11)Ext.XTemplate

    XTemplate是Extjs里面的模板组件.
    下面我们看个最简单的例子.
    效果图:
    附件: XtemplateData Demo.gif
    js代码:
    1. Ext.onReady(function(){
    2.     //数据源
    3.     var data={
    4.       name:"博客园",
    5.       read:[{
    6.           book:'<<道不远人>>',
    7.           date:'2007-7-7'
    8.       },{
    9.           book:"<<大话设计模式>>",
    10.           date:"2006-6-6"
    11.       }]
    12.     }
    13.     //呈现组件
    14.     var mypanel=new Ext.Panel({
    15.       400,
    16.       id:"mypanel",
    17.       title:"XtemplateData简单示例",
    18.       renderTo:Ext.getBody()
    19.     });
    20.     //创建模板
    21.     var tpl=new Ext.XTemplate(
    22.         '<table><tr><th>名称:{name}</th></tr>',
    23.         '<tr><td>',
    24.         '<tpl for="read">',
    25.             '<p>编号:{#},书:{book},日期:{date}</p>',
    26.         '</tpl></td></tr></table>'
    27.     );
    28.     //重写绑定模板
    29.     tpl.overwrite(mypanel.body,data);
    30. })
    复制代码
    简要说明:
    /*
    var tpl=new Ext.XTemplate(
            '<table><tr><th>名称:{name}</th></tr>',
            '<tr><td>',
            '<tpl for="read">',
                '<p>编号:{#},书:{book},日期:{date}</p>',
            '</tpl></td></tr></table>'
        );
    tpl.compile();
        tpl.overwrite(mypanel.body,data);
    */
    1.tpl.compile();//可以在创建模板后,添加tpl.compile();编译代码,速度快点.
    2. tpl.overwrite(mypanel.body,data);//把数据填充到模板中去,并呈现到目标组件
    3.名称:{name}//对于一维单数据对象,直接用{名称}输出,
    4.,<tpl for="read">//对于多维对象(如拥有多条数据的表),使用tpl和for配合使用,会使用tpl的格式把数据一条一条输出,read为上级节点
    5.{.}//对于一维对数据的对象,如color: ['Red', 'Blue', 'Black'],可以用{.}按照tpl模板逐一输出,如:
      '<tpl for="color">',
          '<div> {.}</div>',
        '</tpl>'
    6.{#}//表示循环的索引
    7.parent.***//在子对象中访问父对象元素,使用parent,如:{parent.name}
    8.if//'<tpl if="age > 1">',
                '<p>{name}</p>',
            '</tpl>',
        //if实现有条件的逻辑判断,很容易使用
    9.其他几个常用的参数:
        xindex//循环模板的当前索引index(从1开始),用[]。
        xcount//循环模板循环的次数。 用[]
      举例:
      '<tpl for="read">',
                '<p>编号:{#},书:{book},日期:{date},奇偶:{[xindex%2==0?"偶数":"奇数"]},次数:{[xcount]}</p>',
            '</tpl>
    10.模板成员函数(借用api下):
    1. var tpl = new Ext.XTemplate(
    2.     '<tpl for="kids">',
    3.         '<tpl if="this.isGirl(name)">',
    4.             '<p>Girl: {name} - {age}</p>',
    5.         '</tpl>',
    6.         '<tpl if="this.isGirl(name) == false">',
    7.             '<p>Boy: {name} - {age}</p>',
    8.         '</tpl>',
    9.     '</tpl></p>', {
    10.     isGirl: function(name){
    11.         return name == 'Sara Grace';
    12.     },
    13.     isBaby: function(age){
    14.         return age < 1;
    15.     }
    16. });
    复制代码
    接下来,我们做个服务器的例子(好像很多朋友对这个要求很强烈啊)
    实例演示:用模板呈现服务器数据
    效果图:
    附件: 用模板呈现服务器数据.gif
    html代码:
    1. <div id="container">
    2.   </div>
    复制代码
    css代码:
    1. <style type="text/css">
    2.         body
    3.         {
    4.             font-size:12px
    5.             }
    6.       #container
    7.       {
    8.           border:1px solid black;
    9.           330px;
    10.           }
    11.       td,th
    12.       {
    13.           border-bottom:1px dashed black;
    14.           }
    15.           th
    16.           {
    17.               text-align:center;
    18.               }
    19.       .namewidth
    20.       {
    21.               120px;
    22.           }
    23.           .urlwidth
    24.           {
    25.               150px;
    26.               }
    27.     </style>
    复制代码
    js代码:
    1. Ext.onReady(function(){

    2.     var mydata;
    3.     Ext.Ajax.request({
    4.       url:"getXtemplateData.ashx",//服务器端地址
    5.       success:function(request){
    6.             mydata=request.responseText;//服务器端文本数据
    7.             mydata=eval('('+mydata+')');//使用eval把文本数据转换为json对象
    8.             //或者用extjs自带的方法:mydata=Ext.util.JSON.decode(mydata),效果相同
    9.             var tpl2=new Ext.XTemplate(
    10.             '<table><thead><tr><th>编号</th><th class="namewidth">名称</th><th class="urlwidth">地址</th><th>位置</th></tr></thead><tbody>',
    11.             '<tpl for="results">',
    12.               '<tr><td>{#}</td><td>{linkname}</td><td>{linkurl}</td><td>{linkpos}</td><tr>',
    13.             '</tpl></tbody></table>'
    14.             );
    15.             tpl2.compile();
    16.             tpl2.overwrite(Ext.get("container"),mydata);
    17.        
    18.       },
    19.       failure:function()
    20.       {
    21.         alert("failure!");
    22.       }
    23.     });
    24. })
    复制代码
    /***简单说明***
    1.Ext.Ajax.request(),这里暂且对ajax不多谈论,后面会详细叙述
    2.eval用"()"可以把规范文本转换为json对象,很重要!mydata=eval('('+mydata+')');
    3.如果我们把模板创建和绑定放到ajax外面,会出错,因为ajax为异步调用,记住哦~
    4.关于success函数的request参数,我截个图看看,就明白了
    */
  • 相关阅读:
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    OA办公系统 Springboot Activiti6 工作流 集成代码生成器 vue.js 前后分离 跨域
    java企业官网源码 自适应响应式 freemarker 静态引擎 SSM 框架
    java OA办公系统源码 Springboot Activiti工作流 vue.js 前后分离 集成代码生成器
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 视频播放 弹幕技术 视频弹幕 视频截图 springmvc mybatis SSM
    最后阶段总结
    第二阶段学习总结
    第一阶段学习总结
  • 原文地址:https://www.cnblogs.com/hannover/p/1945930.html
Copyright © 2011-2022 走看看