1、指令只能包含在双引号中,换成单引号则无效
原因是ext中的正则表达式只匹配双引号,见ext-2.0.2 XTemplate.js
var nameRe = /^<tpl\b[^>]*?for="(.*?)"/;
var ifRe = /^<tpl\b[^>]*?if="(.*?)"/;
var execRe = /^<tpl\b[^>]*?exec="(.*?)"/;
例如:
<div id="container"></div>
var xt = new Ext.XTemplate("<tpl for='one'>{name}</tpl>");
xt.append('container', {one: {name: 'in one'}});
此时不会输出内容,必须把改为:
var xt = new Ext.XTemplate("<tpl for=\"two\">{name}</tpl>");
xt.append('container', {one: {name: 'in one'}});
或者
var xt = new Ext.XTemplate(‘<tpl for="two">{name}</tpl>’);
xt.append('container', {one: {name: 'in one'}});
则会输出:in one
2、for指令中作用域只能一层一层,不能一下子跳过两层或以上
例如:
<div id="container"></div>
var xt = new Ext.XTemplate('<tpl for="two">{name}</tpl>');
xt.append('container', {one: {name: 'in one', two: {name: 'in two'}});
此时会报错,必须改为:
var xt = new Ext.XTemplate('<tpl for="one"><tpl for="two">{name}</tpl></tpl>');
xt.append('container', {one: {name: 'in one', two: {name: 'in two'}});
或
var xt = new Ext.XTemplate('<tpl for="one.two">{name}</tpl>');
xt.append('container', {one: {name: 'in one', two: {name: 'in two'}});
3、算术运算按照官方文档是支持:+、-、*、/的,当时试过之后发现-和/有问题;
而且算术只能是一个属性与一个数字表达式:例如可以是{age+1}或{age+1+1},不能是{age+age},{1+age}中的任一种。
猜想应该是正则表达式出了问题:见ext-2.0.2 XTemplate.js
/\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g
4、写XTemplate的参数是字符串中最好不要留空格,否则有些情况会出问题。例如:写'<tpl>{age+1}</tpl>',不要写成'<tpl>{age + 1}</tpl>'
5、for指令支持特殊符号:.或者..
支持(1)parent.obj1.obj2的写法(2)obj1.obj2(等价于values.obj1.obj2)的写法(3)支持this(指XTemplate实例);
支持js 代码:比如要实现obj1.obj2的效果
(1)可以使用function(){return obj1.obj2;}()替换obj1.obj2
var xt = new Ext.XTemplate('<tpl for="function(){return obj1.obj2;}()"></tpl>');
(2)给Xtemplate加上函数,然后在for指令中调用
var xt = new Ext.XTemplate('<tpl for="this.test(values,parent)"></tpl>');
xt.test = function(values, parent) {
// 其他操作
return values['obj1']['obj2'];
}
6、if指令支持values, parent, xindex, xcount参数,支持表达式和js 代码,函数的使用和for一样,返回值拿去判断,判断效果和普通的js if一样
7、exec指令,支持js 代码,与if指令相似,暂时还不清楚其作用
8、可以在一个tpl中同时使用for、if、exec指令,执行顺序为:
(1)执行if,返回值为true(或其在判断时等价值如非'',undefined,null等的值),执行(2)否则结束
(2)执行exec,返回值为false(或其在判断时等价值如'',undefined,null等的值),执行(3)否则结束
(3)执行for
如<tpl for="obj1.age" if="obj1.age>0"></tpl>
先执行if,如果obj1.age大于0为真,则执行for,否则结束
9、除了if、for、exec指令之外的地方,在{}中支持.或#或obj1.obj2(等价于values.obj1.obj2)或parent.obj1.obj2
10、除了if、for、exec指令之外的地方,在{[]}中支持js代码,返回的值会覆盖当前位置,其js代码与if指令相似