1、append方法
var tpl = new Ext.Template(//定义模板
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90>姓名</td><td width=90>{0}</td></tr>',
'<tr><td>年龄</td><td>{1}</td></tr>',
'<tr><td>性别</td><td>{2}</td></tr>',
'</table>'
)
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',['小王',25,'男']);
2、overwrite方法:
var tpl = new Ext.Template(//定义模板
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90>姓名</td><td width=90>{name}</td></tr>',
'<tr><td>年龄</td><td>{age}</td></tr>',
'<tr><td>性别</td><td>{sex}</td></tr>',
'</table>'
)
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.overwrite('tpl-table',{name:'小王',age:25,sex:'男'});
3、模板中使用格式化函数:
//定义模板,并指定模板数据的格式化函数
var tpl = new Ext.Template([
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90>员工姓名</td>',
//{userName:capitalize}使用标准字符串格式化函数,字符串首字母大写
'<td width=120>{userName:capitalize}</td></tr>',
'<tr><td width=90>工作日期</td>',
//{WorkDate:this.cusFormat()}使用自定义格式化函数
'<td width=120>{WorkDate:this.cusFormat()}</td></tr>',
'</table>'
]);
//定义模板数据
var tplData = {
userName : 'tom',
WorkDate : new Date(2002,7,1)
}
//模板的自定义格式化函数
tpl.cusFormat = function(date,o){
return Ext.Date.format(date,'Y年m月d');
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
4、使用自定义格式化函数解析多层json对象
//定义模板,并指定模板数据的格式化函数
var tpl = new Ext.Template(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90 >姓名</td>',
'<td width=120>{name}</td></tr>',
'<tr><td width=90 >年龄</td>',
'<td width=120>{age}</td></tr>',
'<tr><td width=90 >身高</td>',
'<td width=120>{stature:this.parseJson}</td></tr>',
'</table>'
);
//定义模板数据
var tplData = {
name : 'tom',
age : 24,
stature : {
num : 170,
unit : 'cm'
}
}
//通过自定义格式化函数解析json对象
tpl.parseJson = function(json){
return json.num + json.unit;
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
5、使用tpl标签和for运算符
//定义模板,使用tpl标签和for运算符
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90 >姓名</td><td width=90 >年龄</td></tr>',
'<tpl for=".">',
'<tr><td>{name}</td><td>{age}</td></tr>',
'</tpl>',
'</table>'
);
//定义模板数据
var tplData = [
{name:'张三',age:20},
{name:'李四',age:25},
{name:'王五',age:27},
{name:'赵六',age:26}
]
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
6、使用parent在子模板中访问父对象
//定义模板,使用parent在子模板中访问父对象
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td width=90 >姓名</td><td width=90 >年龄</td><td width=90 >公司</td></tr>',
'<tpl for="emps">',
'<tr><td>{name}</td><td>{age}</td><td>{parent.companyName}</td></tr>',
'</tpl>',
'</table>'
);
//定义模板数据
var tplData = {
companyName : 'ACB公司',
emps:[
{name:'张三',age:20},
{name:'李四',age:25},
{name:'王五',age:27},
{name:'赵六',age:26}
]
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
7、数组索引与简单数学运算
//定义模板,数组索引与简单数学运算
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td>序号</td><td width=90 >姓名</td><td width=90 >工资</td></tr>',
'<tpl for=".">',
'<tr><td>{#}</td><td>{name}</td><td>{wage * .9}</td></tr>',
'</tpl>',
'</table>'
);
//定义模板数据
var tplData = [
{name : '张三',wage : 1000},
{name : '李四',wage : 1200},
{name : '王五',wage : 900},
{name : '赵六',wage : 1500}
]
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
8、自动渲染简单数组
//定义模板,自动渲染简单数组
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td>序号</td><td width=90 >姓名</td></tr>',
'<tpl for=".">',
'<tr><td>{#}</td><td>{.}</td></tr>',
'</tpl>',
'</table>'
);
//定义模板数据
var tplData = ['张三','李四','王五','赵六']
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
9、基本的条件逻辑判断
//定义模板,基本的条件逻辑判断
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0>',
'<tr><td>序号</td><td width=90 >姓名</td><td width=90 >工资</td></tr>',
'<tpl for=".">',
'<tpl if="wage > 1000">',
'<tr><td>{#}</td><td>{name}</td><td>{wage}</td></tr>',
'</tpl>',
'</tpl>',
'</table>'
);
//定义模板数据
var tplData = [
{name : '张三',wage : 1000},
{name : '李四',wage : 1200},
{name : '王五',wage : 900},
{name : '赵六',wage : 1500}
]
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
10、在模板中执行任意代码
<style type="text/css">
.even { background-color: #CCFFFF; }
.odd { background-color: #FFFFFF; }
.title {text-align: center;}
</style>
//定义模板,在模板中执行任意代码
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0 class=title>',
'<tr><td>序号</td><td width=90 >姓名</td><td width=90 >工资</td><td width=90 >奖金</td></tr>',
'<tpl for="emps">',
'<tr class="{[xindex % 2 == 0 ? "even" : "odd"]}">',
'<td>{[xindex]}</td><td>{[values.name]}</td>',
'<td>{[values.wage * parent.per]}</td>',
'<td>{[Math.round(values.wage * parent.per / xcount)]}</td></tr>',
'</tpl>',
'<tr><td>发薪时间</td><td colspan=3>{[fm.date(new Date,"Y年m月d日")]}</td></tr>',
'<tr><td>工资总计</td><td colspan=3>{[this.avgWage(values)]}</td></tr>',
'</table>'
);
//模板的自定义格式化函数,用于计算工资总计
tpl.avgWage = function (o) {
var sum = 0;
var length = o.emps.length;
for(var i = 0 ; i <length ; i++){
sum += o.emps[i].wage;
}
return sum * o.per;
}
//定义模板数据,per表示发薪比例,wage表示标准工资
var tplData = {
per : 0.9,
emps : [
{name : '张三',wage : 1000},
{name : '李四',wage : 1200},
{name : '王五',wage : 900},
{name : '赵六',wage : 1500}
]
}
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
11、使用模板成员函数
//定义模板,在模板中使用模板成员函数
var tpl = new Ext.XTemplate(
'<table border=1 cellpadding=0 cellspacing = 0 class=title>',
'<tr><td width=90 >姓名</td><td width=90 >工资</td></tr>',
'<tpl for=".">',
'<tpl if="this.check(wage)">',
'<tr><td>{name}</td>',
'<td>{[this.format(values.wage)]}</td>',
'</tpl></tpl>',
'</table>',
{
//定义模板成员函数
check : function(wage) {
if(wage > 1000){
return true;
}else {
return false
}
},
//定义模板成员函数
format : function(wage) {
if(wage > 1300){
return '<font color=red>'+wage+'</font>';
}else {
return '<font color=blue>'+wage+'</font>';
}
}
}
);
//定义模板数据,per表示发薪比例,wage表示标准工资
var tplData = [
{name : '张三',wage : 1000},
{name : '李四',wage : 1200},
{name : '王五',wage : 900},
{name : '赵六',wage : 1500}
]
//模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中
tpl.append('tpl-table',tplData);
12、在Extjs组件中使用模板
<style type="text/css">
.even { background-color: #CCFFFF; }
.odd { background-color: #FFFFFF; }
</style>
//定义组合框模板
var itemTpl = new Ext.XTemplate(
'<div class="x-combo-list-item {[xindex % 2 == 0 ? "even" : "odd"]}">',
'{#} :{[this.check(values)]}</div>',
{
check : function (values) {
if(values.value > 2 ){
return "<font color=red>"+values.item+"</font>";
}else {
return "<font color=blue>"+values.item+"</font>";
}
}
}
);
//创建数据模型
Ext.regModel('ItemInfo', {
fields: ['item','value']
});
new Ext.form.Panel({
title:'在Extjs组件中使用模板',
renderTo: Ext.getBody(),
bodyPadding: 5,
height : 100,
frame : true,
width : 350,
items : [{
xtype : 'combo',
fieldLabel:'邮政编码',
displayField:'item',
valueField:'value',
labelSeparator :':',//分隔符
listConfig : {
itemTpl : itemTpl
},
editable : false,
queryMode: 'local',
triggerAction: 'all',
store : new Ext.data.Store({
model : 'ItemInfo',
fields: ['item','value'],
data : [{item:'条目1',value:1},
{item:'条目2',value:2},
{item:'条目3',value:3},
{item:'条目4',value:4},
{item:'条目5',value:5},
{item:'条目6',value:6}]
})
}]
});
13、Ext.view.View示例
var inputForm = Ext.create('Ext.form.Panel',{
bodyPadding: 5,
width : 490,
flex : 2,
fieldDefaults:{//统一设置表单字段默认属性
labelSeparator :':',//分隔符
labelWidth : 60,//标签宽度
width : 150,//字段宽度
msgTarget : 'side',
allowBlank : false,
labelAlign : 'right'
},
layout: {//设置容器字段布局
type: 'hbox',
align: 'middle'//垂直居中
},
defaultType: 'textfield',//设置表单字段的默认类型
items:[{
fieldLabel:'产品名称',
name : 'productName'
},{
fieldLabel:'数量',
xtype : 'numberfield',
name : 'productNum'
},{
fieldLabel:'金额',
xtype : 'numberfield',
name : 'productPrice'
}],
fbar : [{
text : '添加',
handler : function(){
if(inputForm.getForm().isValid()){
var data = inputForm.getForm().getValues();
var product = Ext.ModelMgr.create(data, 'ProductInfo');
productStore.add(product);
inputForm.getForm().reset();
}
}
}]
});
//创建数据模型
Ext.regModel('ProductInfo', {
fields: ['productName','productNum','productPrice']
});
//创建产品数据源
var productStore = Ext.create('Ext.data.Store',{
autoLoad : true,
data : [],
model : 'ProductInfo',
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'datas'
}
}
});
//定义模板
var productTpl = new Ext.XTemplate(
'<table border=1 cellspacing=0 cellpadding=0 width=100%>',
'<tr><td width=160>产品名称</td><td width=75>数量</td><td width=75>金额</td></tr>',
'<tpl for=".">',
'<tr><td>{productName}</td><td>{productNum}</td><td>{productPrice}</td></tr>',
'</tpl>',
'</table>'
);
//产品数据视图
var productView = Ext.create('Ext.view.View',{
store: productStore,
tpl: productTpl,
deferEmptyText : false,
itemSelector:'div.thumb-wrap',
emptyText: '请录入商品'
});
//产品面板
var productViewPanel = Ext.create('Ext.panel.Panel',{
autoScroll:true,
width : 490,
flex : 3,
layout : 'fit',
bodyStyle:'background-color:#FFFFFF',
items: productView
});
Ext.create('Ext.panel.Panel',{
renderTo: document.body,
frame:true,
width : 500,
height: 200,
layout:'vbox',
title:'产品录入',
items: [inputForm, productViewPanel]
});