Sench类似List多列控件实现
2014-04-13 22:42
169 查看
因为公司开发项目需要,要有多列的list设计,在实现上用sencha 自带的list不能完成,所以自己写下了这个。
以下内容是自己写的,本人刚刚开学学习sencha,也是第一次写博客,想把自己的学习过程记录下。欢迎吐槽。
实现原理很简单,就是在往MyList中添加数据的时候先添加一行(ListRow),这个listRow其实就是一个简单的container控件。(因为项目原因,本次的开发不能使用sencha的数据代理。所以所有数据都是自己手动通过ajax获取)
然后把要添加的数据添加到listrow控件下。在添加下一个数据的时候先判断这行中已经存在了几个数据了,如果数据已经满了,那么在新建一行添加到mylist中。
loadmore其实就是一个按钮,先判断mylist中显示了数据的count,如果count小于服务端要显示数据的总数据,那么就显示,相当于list控件中的上拉加载更多的插件。
(上面说的数据其实就是对应显示数据的一个sencha内部的组件,如:button等。)
代码如下:
Ext.define('MyList', {
extend: 'Ext.Container',
xtype: 'muticolumnlist',
requires: [
'ListRow',
'LoadMore',
'ListColumn'
],
config: {
//分页是把以下两个参数传递到服务端获取数据
pageIndex: 1, //分页页码
pageSize: 5, //分页每页数据
searchKey: '',
datacount: 0,
listColumn: 2, //list的列数
scrollable: 'vertical',
width: '100%',
height: '100%',
items:[]
},
initialize: function() {
this.callParent();
},
//清除所有数据
clearAll: function(){
this.removeAll(true, true);
},
//添加一行
addRow: function(){
var newRow = Ext.create('ListRow');
this.add(newRow);
},
//添加一个视图对象
addItem: function(view){
if(!view){
return;
}
if (this.items.getCount() == 0) {
this.addRow();
}
var lastRow = this.items.last();
if(lastRow.items.getCount() < this.getListColumn()){
lastRow.add(view);
}else{
this.addRow();
this.items.last().add(view);
}
},
//添加加载更多视图
addLoadMoreView: function(totalcount){
if(this.getDatacount() < totalcount){
this.addItem(Ext.create('LoadMore'));
}
},
//添加数组数据,datas是数据的列表
addItems: function(datas){
if(datas instanceof Array){
this.deleteLastItem();
for(var i=0; i<datas.length; i++){
var model = datas[i];
//创建显示数据的组件
var dataView = Ext.create('ListColumn');
this.addItem(dataView);
dataView.showData(model);
}
}
},
//清除最后一个Item
deleteLastItem: function(){
var lastRow = this.items.last();
if(lastRow && lastRow.items){
lastRow.remove(lastRow.items.last());
}
},
// 从服务器加载数据
loadDataToListByPage: function(pageIndex) {
//此处重服务端获取数据填充到store(分页获取)
}
});
以下内容是自己写的,本人刚刚开学学习sencha,也是第一次写博客,想把自己的学习过程记录下。欢迎吐槽。
实现原理很简单,就是在往MyList中添加数据的时候先添加一行(ListRow),这个listRow其实就是一个简单的container控件。(因为项目原因,本次的开发不能使用sencha的数据代理。所以所有数据都是自己手动通过ajax获取)
然后把要添加的数据添加到listrow控件下。在添加下一个数据的时候先判断这行中已经存在了几个数据了,如果数据已经满了,那么在新建一行添加到mylist中。
loadmore其实就是一个按钮,先判断mylist中显示了数据的count,如果count小于服务端要显示数据的总数据,那么就显示,相当于list控件中的上拉加载更多的插件。
(上面说的数据其实就是对应显示数据的一个sencha内部的组件,如:button等。)
代码如下:
Ext.define('MyList', {
extend: 'Ext.Container',
xtype: 'muticolumnlist',
requires: [
'ListRow',
'LoadMore',
'ListColumn'
],
config: {
//分页是把以下两个参数传递到服务端获取数据
pageIndex: 1, //分页页码
pageSize: 5, //分页每页数据
searchKey: '',
datacount: 0,
listColumn: 2, //list的列数
scrollable: 'vertical',
width: '100%',
height: '100%',
items:[]
},
initialize: function() {
this.callParent();
},
//清除所有数据
clearAll: function(){
this.removeAll(true, true);
},
//添加一行
addRow: function(){
var newRow = Ext.create('ListRow');
this.add(newRow);
},
//添加一个视图对象
addItem: function(view){
if(!view){
return;
}
if (this.items.getCount() == 0) {
this.addRow();
}
var lastRow = this.items.last();
if(lastRow.items.getCount() < this.getListColumn()){
lastRow.add(view);
}else{
this.addRow();
this.items.last().add(view);
}
},
//添加加载更多视图
addLoadMoreView: function(totalcount){
if(this.getDatacount() < totalcount){
this.addItem(Ext.create('LoadMore'));
}
},
//添加数组数据,datas是数据的列表
addItems: function(datas){
if(datas instanceof Array){
this.deleteLastItem();
for(var i=0; i<datas.length; i++){
var model = datas[i];
//创建显示数据的组件
var dataView = Ext.create('ListColumn');
this.addItem(dataView);
dataView.showData(model);
}
}
},
//清除最后一个Item
deleteLastItem: function(){
var lastRow = this.items.last();
if(lastRow && lastRow.items){
lastRow.remove(lastRow.items.last());
}
},
// 从服务器加载数据
loadDataToListByPage: function(pageIndex) {
//此处重服务端获取数据填充到store(分页获取)
}
});
相关文章推荐
- sencha ext js 6 快速入门(必看)
- sencha touch 彩色图标按钮(button+ico)
- 在Sencha Touch2中使用布局
- Fastbook的创造:一个HTML5爱情故事
- 某著名外企招聘高级 ExtJS / Sencha 开发工程师(猎头)
- Sencha Touch MVC 模式
- 开源健康资讯、健康知识、健康一问的APP
- Android SQLite PhoneGap sencha touch 中调用Java原生程序,数据加载到页面,并实现滑动分页
- Sencha touch中Ext.List如何高度自适应的解决方法
- sencha touch 中实现一个view的刷新
- sencha自定义ImageField用于表单中显示图片
- Hybrid开发 Sencha pinch事件的监听实现图片的缩放功能
- sencha list实现多选
- sencha touch笔记(1)——基础安装配置
- sencha touch笔记(2)——ExtJs语法基础
- sencha touch笔记(3)
- senchaa touch笔记(4)——MVC
- sencha touch笔记(5)——DataView组件(1)
- sencha touch(7)——list组件
- sencha touch笔记(6)——路由控制(1)