ext-2.0.2 xtemplate问题

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&gt;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指令相似




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值