浏览 8396 次
锁定老帖子 主题:extjs模板的使用
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-29
最后修改:2009-04-29
Ext.onReady(function(){ Ext.onReady(function(){ //定义模板 使用标签tpl和操作符for var tpl1 = 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>' ); //通过自定义格式化函数解析json对象 {stature:this.parseJson()} var tpl2 = 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>' ); tpl2.parseJson = function(json){ return json.num + json.unit; } //数组索引与简单数学运算 {#} 每一项都加上序号 var tpl3 = 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 tpl4 = 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>' ); //基本的条件逻辑判断 这没有else的操作符 如需要,就要写两个逻辑相反的if的语句 //输出工资大于1000的员工信息 工资 * 0.9 var tpl5 = 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 * .9}</td></tr>', '</tpl>', '</tpl>', '</table>' ); //定义组合框模板 xindex:若是循环模板,这是当前循环的索引index(从1开始)。 // values:当前作用域下的值 var itemTpl = new Ext.XTemplate( '<tpl for=".">', '<div class="x-combo-list-item {[xindex % 2 == 0 ? "even" : "odd"]}">', '{#} :{[this.check(values)]}</div>', '</tpl>', { check : function (values) { if(values.value > 2 ){ return "<font color=red>"+values.item+"</font>"; }else { return "<font color=blue>"+values.item+"</font>"; } } } ) new Ext.form.FormPanel({ applyTo :'target', title:'在Extjs组件中使用模板', labelSeparator :':',//分隔符 height : 100, frame : true, width : 350, items : [ new Ext.form.ComboBox({ fieldLabel:'combo', displayField:'item', valueField:'value', tpl : itemTpl,//引入自定义模板 editable : false, mode: 'local', triggerAction: 'all', store : new Ext.data.SimpleStore({ fields: ['item','value'], data : [['条目1',1],['条目2',2],['条目3',3], ['条目4',4],['条目5',5],['条目6',6]] }) }) ] }); var productTpl = new Ext.XTemplate( '<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>' ); Ext.get('addProduct').on('click',function(){ var pname = Ext.get('productName').getValue(); var pnum = Ext.get('productNum').getValue(); var pprice = Ext.get('productPrice').getValue(); productTpl.append('product-table',[pname,pnum,pprice]); }); //定义模板数据 var data1 = [ {name:'张三',age:20}, {name:'李四',age:25}, {name:'王五',age:27}, {name:'赵六',age:26} ]; var data2 = { name : 'tom', age : 24, stature : { num : 170, unit : '厘米' } }; var data3= [ {name : '张三',wage : 1000}, {name : '李四',wage : 1200}, {name : '王五',wage : 900}, {name : '赵六',wage : 1500} ]; var data4 = ['张三','李四','王五','赵六']; //模板值和模板进行组合并将新生成的节点插入到id为'tpl-table'的元素中 tpl1.append('tpl-1',data1); tpl2.append('tpl-2',data2); tpl3.append('tpl-3',data3); tpl4.append('tpl-4',data4); tpl5.append('tpl-5',data3); }); }); tpl.html <div id='tpl-1'></div> <br> <div id="tpl-2"></div> <br> <div id="tpl-3"></div> <br> <div id="tpl-4"></div> <br> <div id="tpl-5"></div> <br> <div id="target"></div> <br> 产品名称:<input type="text" id="productName"><br> 产品数量:<input type="text" id="productNum"><br> 产品价格:<input type="text" id="productPrice"> <input type="button" value="增加产品" id='addProduct'> <table id='product-table' border=1 cellspacing=0 cellpadding=0> <tr> <td width=160>产品名称</td><td width=75>数量</td><td width=75>金额</td> </tr> </table> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-09
非常不错.兄弟受益匪浅.但是如果我要在模板中加入一个ToolTip如何做呢?
|
|
返回顶楼 | |
发表时间:2009-06-11
fuwei1688 写道 非常不错.兄弟受益匪浅.但是如果我要在模板中加入一个ToolTip如何做呢?
首先要在 你js第一行加入 Ext.QuickTips.init(); 第二在你想要加入tooltip的地方如<td> <div> <input> 加入 ext:qtip属性 ext:qtip="你的内容" 代码: var tpl2 = new Ext.Template( '<table border=1 cellpadding=0 cellspacing = 0>', '<tr><td width=90 ext:qtip="这是你的名字..">姓名</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>' ); |
|
返回顶楼 | |
发表时间:2009-07-08
最后修改:2009-07-08
请教一下:我参考你的例子,扩展了一下:
Ext.onReady(function() { Ext.onReady(function() { /** * 例子2: * 通过自定义格式化函数解析json对象 {stature:this.parseJson()} * @param json */ var tpl2 = new Ext.Template( '<table border=1 cellpadding=0 cellspacing = 0>', '<tr><td width=90 >姓名</td>', '<td width=120>{name:this.parseName()}</td></tr>', '<tr><td width=90 >年龄</td>', '<td width=120>{age:this.parseAge()}</td></tr>', '<tr><td width=90 >身高</td>', '<td width=120>{stature:this.parseStature()}</td></tr>', '</table>', '<hr>' ); //自定义函数 tpl2.parseName = function(name) { return name + "@gmail.com"; } tpl2.parseAge = function(age) { return age + '岁'; } tpl2.parseStature = function(stature) { return stature.num + stature.unit; } var data2 = { name : 'tom', age : 24, stature : { num : 170, unit : '厘米' } }; tpl2.append('tpl-2', data2); }); }); 结果很奇怪:界面如图: 年龄那项目显示不出来了。 如果 姓名和年龄那里直接用{name}和{age} 则 姓名,年龄,身高都能正常显示,为什么增加了 parseName和parseAge就影响parseAge呢? |
|
返回顶楼 | |