`

ExtJs的XTemplate使用

 
阅读更多

  ExtJs目前还是很多企业web应用首选的js框架,ext本身提供了很多很好的控件给我们使用了,简单的应用已经能基本满足要求,但是,当我们深度使用Ext后,为了应对一些奇怪的需求,就要使用到一些Ext的秘笈了,其中一个就是XTemplate。什么?你还不知道XTemplate是个什么东西?好吧,let go!

 

  •   先介绍一下XTemplate

 

 

 

HIERARCHY

Ext.Template
Ext.XTemplate

 

 

XTemplate是Template的一个子类,他能做什么呢?请看docs里面的描述:

A template class that supports advanced functionality like:

  • Autofilling arrays using templates and sub-templates
  • Conditional processing with basic comparison operators
  • Basic math function support
  • Execute arbitrary inline code with special built-in template variables
  • Custom member functions
  • Many special tags and built-in operators that aren't defined as part of the API, but are supported in the templates that can be created
  上面的意思就是说,XTemplate就是个模板类,模板是什么?就是结合数据动态生成页面(html)的工具:模板+数据 = HTML。上面还提到这个模板类支持的功能,包括:支持数组的输出、支持条件判断、支持基础的数学运算、支持内建的模板变量....等等

  •   XTemplate的用法

  知道XTemplate是什么之后,我们来看看怎么来使用他吧

 

先准备例子数据:

 

 

var data = {
name: 'Tommy Maintz',
title: 'Lead Developer',
company: 'Sencha Inc.',
email: 'tommy@sencha.com',
address: '5 Cups Drive',
city: 'Palo Alto',
state: 'CA',
zip: '44102',
drinks: ['Coffee', 'Soda', 'Water'],
kids: [{
        name: 'Joshua',
        age:3
    },{
        name: 'Matthew',
        age:2
    },{
        name: 'Solomon',
        age:0
}]
};

 

 

数组处理

 

 

var tpl = new Ext.XTemplate(
    '<p>Kids: ',
    '<tpl for=".">',       // process the data.kids node
        '<p>{#}. {name}</p>',  // use current array index to autonumber
    '</tpl></p>'
);
tpl.overwrite(panel.body, data.kids); // pass the kids property of the data object
 

 

 上面就是单独使用XTemplate的过程。

 

 

条件判断

 

The tpl tag and the if operator are used to provide conditional checks for deciding whether or not to render specific parts of the template. Notes:

  • Double quotes must be encoded if used within the conditional
  • There is no else operator — if needed, two opposite if statements should be used.
<tpl if="age > 1 && age < 10">Child</tpl>
<tpl if="age >= 10 && age < 18">Teenager</tpl>
<tpl if="this.isGirl(name)">...</tpl>
<tpl if="id==\'download\'">...</tpl>
<tpl if="needsIcon"><img src="{icon}" class="{iconCls}"/></tpl>
// no good:
<tpl if="name == "Tommy"">Hello</tpl>
// encode " if it is part of the condition, e.g.
<tpl if="name == &quot;Tommy&quot;">Hello</tpl>

Using the sample data above:

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);
 

基本数学运算

 

 

  • The following basic math operators may be applied directly on numeric data values:

    + - * /
    For example:
    var tpl = new Ext.XTemplate(
       
    '<p>Name: {name}</p>',
       
    '<p>Kids: ',
       
    '<tpl for="kids">',
           
    '<tpl if="age &gt; 1">',  // <-- Note that the > is encoded
               
    '<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);
     

 

 


 

 

使用内建的模板变量

 

 

Anything between {[ ... ]} is considered code to be executed in the scope of the template. There are some special variables available in that code:

  • values: The values in the current scope. If you are using scope changing sub-templates, you can change what values is.
  • parent: The scope (values) of the ancestor template.
  • xindex: If you are in a looping template, the index of the loop you are in (1-based).
  • xcount: If you are in a looping template, the total length of the array you are looping.

This example demonstrates basic row striping using an inline code block and the xindex variable:

 

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);

使用自定义函数

 

 

 

  • One or more member functions can be specified in a configuration object passed into the XTemplate constructor for more complex processing:

    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>',
             
    // use opposite if statement to simulate 'else' processing:
           
    '<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>',
       
    {
           
    // XTemplate configuration:
            compiled
    : true,
           
    // member functions:
            isGirl
    : function(name){
               
    return name == 'Sara Grace';
           
    },
            isBaby
    : function(age){
               
    return age < 1;
           
    }
       
    }
    );
    tpl
    .overwrite(panel.body, data);
     

  • 结合控件使用XTemplate

XTemplate在以下的控件中都实现了Xtemplate的用法:

例如用于分组Grid中的自定义Group列头

Sample usage:

var grid = new Ext.grid.GridPanel({
    // A groupingStore is required for a GroupingView
    store: new Ext.data.GroupingStore({
        autoDestroy: true,
        reader: reader,
        data: xg.dummyData,
        sortInfo: {field: 'company', direction: 'ASC'},
        groupOnSort: true,
        remoteGroup: true,
        groupField: 'industry'
    }),
    colModel: new Ext.grid.ColumnModel({
        columns:[
            {id:'company',header: 'Company', width: 60, dataIndex: 'company'},
            // groupable, groupName, groupRender are also configurable at column level
            {header: 'Price', renderer: Ext.util.Format.usMoney, dataIndex: 'price', groupable: false},
            {header: 'Change', dataIndex: 'change', renderer: Ext.util.Format.usMoney},
            {header: 'Industry', dataIndex: 'industry'},
            {header: 'Last Updated', renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
        ],
        defaults: {
            sortable: true,
            menuDisabled: false,
            width: 20
        }
    }),

    view: new Ext.grid.GroupingView({
        forceFit: true,
        // custom grouping text template to display the number of items per group
        groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})'
    }),

    frame:true,
    width: 700,
    height: 450,
    collapsible: true,
    animCollapse: false,
    title: 'Grouping Example',
    iconCls: 'icon-grid',
    renderTo: document.body
});

 

分享到:
评论

相关推荐

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

    在本文中,我们将深入探讨如何使用ExtJS的XTemplate来实现多张图片的居中排版和自动缩放处理。ExtJS是一个强大的JavaScript框架,它提供了丰富的组件和模板功能,帮助开发者构建用户界面。XTemplate是ExtJS中的一个...

    ExtJS基础学习

    ExtJS学习

    轻松搞定Extjs 带目录

    ### 知识点概述 #### 1. Extjs概念与目录结构 Extjs是一个基于JavaScript的框架,用于构建交互式的web应用。...通过学习本书,读者能够全面掌握Extjs的各种特性,进而使用Extjs开发出功能强大、交互良好的Web应用。

    extjs模板的使用

    在实际开发中,熟练掌握 `Ext.XTemplate` 的使用能够提高页面的交互性和数据展示效率,使得前端界面更加灵活和智能化。通过合理的模板设计,开发者可以轻松地将后端提供的数据转化为用户友好的界面元素,从而提升...

    ExtJS模板使用说明(含代码示例).zip

    3. 使用XTemplate:XTemplate是ExtJS的一个高级模板引擎,提供更丰富的功能,如支持函数调用、条件语句等。 三、模板语法 模板语法主要基于两种类型的占位符: - `{}`:双大括号内的变量名代表数据对象的属性,例如...

    Extjs 计算器 javascript计算器

    总之,"Extjs 计算器 javascript计算器"项目展示了如何使用ExtJS框架和XTemplate技术来创建一个交互式的Web应用。它涉及到HTML、CSS和JavaScript的综合运用,尤其是JavaScript中的数学运算和事件处理,为用户提供了...

    给Extjs的GridPanel增加“合计”行

    - 定义一个合计行的模板,可以使用EXTJS的XTemplate。模板中包含合计值的占位符,这些占位符将在数据计算完成后被替换为真实的合计值。 4. **插入合计行到DOM**: - 在自定义View的`onRender`方法中,找到...

    轻松搞定Extjs

    此外,作者推荐使用Spket IDE进行开发工作,这是一款专门针对Extjs优化的集成开发环境。 - **下载**: 访问Extjs官方网站或GitHub仓库下载最新版本的框架文件。 - **拦路虎**: 指在搭建开发环境过程中可能遇到的问题...

    Extjs 4.2分组小计

    使用`summaryRenderer`,结合Ext.XTemplate,可以创建包含多个统计信息和格式化的小计行。 总结,ExtJS 4.2的分组小计功能强大且灵活,能有效地帮助开发者构建具有数据分析功能的Web应用。通过理解并熟练运用上述...

    ExtJS效果Tabs形式

    在描述中提到的"ExtJS效果Tabs形式"指的是使用ExtJS实现的标签页(Tabs)布局。这种布局方式在Web应用中非常常见,用于组织和展示多个相关的视图或内容区域。在本文中,我们将深入探讨如何使用ExtJS创建和管理标签页...

    ExtJS使用笔记

    在学习和使用ExtJS的过程中,我们需要了解其基础构成,如何引用库文件,以及如何通过各种控件实现丰富的交互效果。 首先,要开始使用ExtJS,必须了解其构成及如何引用。ExtJS由几个关键部分组成,包括Ext Core...

    extjs可视化设计器

    5. **模板和样式**:学习EXTJS的模板语言(XTemplate)和CSS样式,定制组件的外观和格式。 6. **导出和导入代码**:知道如何将设计好的界面导出为EXTJS代码,并能将已有的EXTJS代码导入到设计器中进行编辑。 7. **...

    Extjs4下拉菜单ComboBox中用Grid显示通用控件

    tpl: new Ext.XTemplate('&lt;div class="x-boundlist-inner"&gt;', '&lt;tpl for="."&gt;', '&lt;div class="x-boundlist-item"&gt;', '{name}', '&lt;/div&gt;', '&lt;/tpl&gt;', '&lt;/div&gt;'), multiSelect: true, // 多选模式 width: 300 } ...

    ExtJS中文手册.pdf

    - **新组件**:ExtJS 2引入了许多新的组件,如Grid、XTemplate、DataView等。 通过以上内容的详细介绍,我们不仅能够了解到ExtJS的基本用法,还能够深入掌握其高级特性,从而更加高效地利用ExtJS进行Web应用的开发...

    Extjs2.0中文文档

    1. **ExtjsOOP基础**:Ext.js在2.0版本中加强了对面向对象编程的支持,文档中会介绍如何定义JavaScript类,以及如何使用Extjs命名空间和类的继承。这里也会提到Extjs的OOP特性和配置选项的使用方法。 2. **消息框的...

    ext_image.rar_ext_image_extjs_extjs 4.2 img_extjs image_extjs图片上

    总之,"ext_image.rar"提供的资源展示了如何使用ExtJS 4.2构建一个完整的图片管理系统,包括图片的显示、上传和删除功能。对于开发者来说,这是一份有价值的参考资料,可以帮助他们掌握ExtJS在实际项目中的应用,...

Global site tag (gtag.js) - Google Analytics