Sencha Touch 自定义List
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:editor 阅读 563
在senchatouch的list里嵌入自己想要的控件,有多种选择方案。其中一种是直接在tpl上加上html标签(如<button><input>)创建html控件。效果如下:蛋疼了

在sencha touch的list里嵌入自己想要的控件,有多种选择方案。

其中一种是直接在tpl上加上html标签(如<button><input>)创建html控件。效果如下:

蛋疼了吧。。。风格不统一,而且要给按钮加事件也显得比较别扭。这个方案,当然还是有它的好处的,这是所有方案中效率最高的一个。

如果你使用的是图片按钮,自然也是可以很协调的。

如果我们想要用框架原有的按钮怎么办,这就是本篇文章的重点了。

第二种方案

先看效果

这个方案,要求你对Sencha Touch框架有一定程度的了解,当然,学习它也能让你对这个框架有更深一层的认识。

废话不说直接上代码。

list示例

  Ext.regModel('Example',{      fields:['id','text']  });    Ext.regStore('MyStore',{      model :'Example',      data:[          {id : '0', text : 'aaaa'},          {id : '1', text : 'bbbb'},          {id : '2', text : 'cccc'},          {id : '3', text : 'dddd'}      ]  });    var myApp = new Ext.Application({    //利用框架的Application类的构造函数构造一个应用      name: 'myApp',        //为这个应用指定名称      //useLoadMask: true,      launch: function () {            //这是程序的入口          var list = new Ext.List({              itemTpl : new Ext.XTemplate(                  '<div>{text}</div>',                  '<div style="float:right" id="button_{id}"></div>'),//这里的id让后面可以找到这个div并将按钮渲染到这个div中              store : 'MyStore',              isAfterrendered : false,    //添加一个变量,用于检测afterrender是否已经发生              listeners : {                  afterrender : function() {            //afterrender事件只有list首次载入的时候才会触发。                      this.isAfterrendered = true;    //这个this是指list                      console.log('afterrender');        //请在调试状态下查看事件发生的顺序                  },                  update : function() {    //update事件在render(渲染)之前执行一次,渲染完毕                                          //后又会执行一次。以后在list内容发生改变时执行。                      console.log('update');                      if (this.isAfterrendered) {                          Ext.each(Ext.StoreMgr.lookup('MyStore').data.items,//对MyStore的每一条数据执行一次循环                              function(arrayItem, index) {                                  new Ext.Button({                                      iconMask : true,                                      ui : 'plain',    //按钮背景透明                                      iconCls : 'delete',                                      renderTo : 'button_' + arrayItem.data.id                                  });                              });                      }                  }                        }          });                    var panel = new Ext.Panel({              fullscreen : true, //设为全屏就会显示出来              items : list          });      }  });

该说的在注释里头都说了,就这样吧。

所有的控件都可以用过来,很好地保持了风格的统一,而且添加按钮事件也比较方便。

但是这样做因为需要额外的渲染,效率明显不如第一个方案。

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2