sencha touch list(列表)、 store(数据源)、model(模型)详解

//求职
Ext.define(‘app.model.Staff‘, {
    extend: ‘Ext.data.Model‘,
    config: {
        fields: [{
            name: ‘id‘,
            type: ‘int‘
        },
        {
            //用户id
            name: ‘uid‘,
            type: ‘int‘
        },
        {
            //姓名
            name: ‘fullname‘,
            type: ‘string‘,
            convert: function (v, record) {
                var display = record.data.display_name;
                if (display == 1) {
                    return v;
                } else if (display == 2) {
                    return ‘N‘ + record.data.id;
                }
                return v.substring(0, 1) + ‘**‘;
            }
        },
        {
            //年龄
            name: ‘birthdate‘,
            type: ‘int‘,
            convert: function (v, record) {
                var time = new Date().getFullYear();
                return time - v;
            }
        },
        {
            //姓隐藏程度
            name: ‘display_name‘,
            type: ‘string‘
        },
        {
            //全职兼职
            name: ‘nature_cn‘,
            type: ‘string‘
        },
        {
            //标签
            name: ‘tag‘,
            type: ‘string‘,
            convert: function (v, record) {
                if (!v) {
                    return ‘‘;
                }
                var taglist = v.split(‘|‘);
                var tag = [];
                for (var i in taglist) {
                    var j = {
                        title: taglist[i].split(‘,‘)[1]
                    };
                    tag.push(j);
                }
                return tag;
            }
        },
        {
            //学历
            name: ‘education_cn‘,
            type: ‘string‘
        },
        {
            //工作经验
            name: ‘experience_cn‘,
            type: ‘string‘,
            convert: function (v, record) {
                return v != "无经验" ? v + ‘经验‘ : v;
            }
        },
        {
            //性别
            name: ‘sex_cn‘,
            type: ‘string‘
        },
        {
            //地址
            name: ‘householdaddress‘,
            type: ‘string‘
        },
        {
            //刷新时间
            name: ‘refreshtime‘,
            type: ‘string‘
        },
        {
            //期望岗位
            name: ‘intention_jobs‘,
            type: ‘string‘
        }]
    }
});

值得注意的是convert方法,有两个参数其中v是当前字段的值,record则是整个model的值
可以根据需求来二次加工数据,比如说后台返回的值是0,1而你希望他显示的值是男,女这种情况

下面再说说store

代码如下:

Ext.define(‘app.store.StaffList‘, {
    extend: ‘Ext.data.Store‘,
    config: {
        model: ‘app.model.Staff‘,//对应的数据模型,只有模型中已经定义的字段才能存储到store中,没有定义的字段是不是存储的
        storeId: ‘staffList‘, //给他一个id,以便于list中指定store。以及通过Ext.getStore(id)来得到store
        autoLoad: false,//在index页面启动时不自动加载数据
        pageSize: 7, //想后台传递一个参数pageSize值为7,这里的意思是告诉后台每页显示7条数据,用于分页。
        //还有一个参数limit,用来告诉后台当前显示第几页。
        proxy: {
            type: ‘jsonp‘,//向后台读取数据的方式,可以是jsonp或者ajax
            url: MyUtil.postUrl + StaffList.ashx‘,//请求数据的地址
            reader: {
                type: "json",//返回数据的格式
                rootProperty: ‘result‘,//返回数据的根节点
                totalProperty: ‘totalCounts‘//数据总数,后台不给也没事。不过这样就没办法确定是不是最后一页了
            }
        }
    }
});

需要注意的是,pageSize的作用并不是指在list中每次显示多少条数据,而是告诉后台你每次要显示多少条数据,你要7条后台给你10条也是可以的,给你10条list就会显示10条数据上去

就像小学生问妈妈要零用钱,小学生问妈妈要5块,妈妈心情好了给10块也是可以的,心情不好一块也不给。不管给多少,小学生都得乖乖的把钱放到兜兜里面。

对于list可以做一个小小的扩展

/*
*自定义列表页面
*/
Ext.define(‘app.view.util.MyList‘, {
    alternateClassName: ‘myList‘,
    extend: ‘Ext.List‘,
    xtype: ‘myList‘,
    requires: [‘Ext.plugin.ListPaging‘, ‘Ext.plugin.PullRefresh‘],
    config: {
        cls: ‘list‘,//自定义css
        plugins: [{
            xclass: ‘Ext.plugin.ListPaging‘,//分页插件
            autoPaging: true,//滚动到最底部时是否自动加载下一页数据
            noMoreRecordsText: ‘没有更多内容了‘,
            loadMoreText: ‘加载更多...‘//加载更多按钮显示内容
        },
        {
            xclass: ‘Ext.plugin.PullRefresh‘,//下拉刷新插件
            lastUpdatedText: ‘上次刷新时间:‘,
            loadingText: ‘加载中...‘,
            pullRefreshText: ‘下拉可以手动刷新‘,
            releaseRefreshText: ‘松开可以刷新‘,
            refreshFn: function (loaded, arguments) {//开始刷新触发的时间,默认效果是只刷新第一页数据。不管后面显示了多少数据
                loaded.getList().getStore().loadPage(1);//这里进行了处理,触发时清空所有数据,重新加载第一页数据。
            }
        }],
        loadingText: false,  //禁用加载遮罩,防止跳转时页面卡顿,使用统一的遮罩效果
        emptyText: ‘没有更多内容了‘
    }
});

一个list这样就可以了

Ext.define(‘app.view.job.StaffList‘, {
    alternateClassName: ‘staffList‘,
    extend: ‘app.view.util.MyList‘,
    requires: [‘app.view.job.StaffInfo‘],
    xtype: ‘staffList‘,
    config: {
        itemHeight:68,
        store: ‘staffList‘,
        itemTpl: new Ext.XTemplate(
        ‘<div class="left">‘,
            ‘<div class="row">{fullname}</div><div class="row sm grayF">{education_cn} - {experience_cn} - {nature_cn}</div><div class="row sm grayF">{sex_cn} - {householdaddress}</div>‘,
        ‘</div>‘,
        ‘<div class="right"><div class="row grayF">{refreshtime}</div><div class="row sm orangeF">{intention_jobs}</div></div>‘)
    }
});

大概就是这样吧,附图一张

转自:http://www.cnblogs.com/mlzs/p/3169893.html

时间: 2024-10-07 01:36:33

sencha touch list(列表)、 store(数据源)、model(模型)详解的相关文章

配置模型详解

ASP.NET Core的配置(2):配置模型详解 在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvider,以及作为“中间人”的ConfigurationBuilder.接下来我们将会对由这三个核心对象组成的配置模型进行详细介绍,不过在此之前我们有必要来认识配置信息在不同载体中所体现出来的三种结构. 目录一.配置的三种结构逻辑结构原始结构物理结构

Socket模型详解(转)

Socket模型详解(转) Socket模型详解 两种I/O模式 一.选择模型 二.异步选择 三.事件选择 四.重叠I/O模型 五.完成端口模型 五种I/O模型的比较 两种I/O模式 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误

OSI七层模型详解 TCP/IP协议

总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转换,数据加密 没有协议 会话层 解除或建立与别的接点的联系 没有协议 传输层 提供端对端的接口 TCP,UDP 网络层 为数据包选择路由 IP,ICMP,OSPF,EIGRP,IGMP 数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,MTU 物理层 以二进制数据形式在物理媒体上

日志模型详解

日志模型详解 NET Core的日志模型主要由三个核心对象构成,它们分别是Logger.LoggerProvider和LoggerFactory.总的来说,LoggerProvider提供一个具体的Logger对象将格式化的日志消息写入相应的目的地,但是我们在编程过程中使用的Logger对象则由LoggerFactory创建,这个Logger利用注册到LoggerFactory的LoggerProvider来提供真正具有日志写入功能的Logger,并委托后者来记录日志. 目录一.Logger  

Extjs4.10Model模型详解

一.创建Model模型 Extjs4.10提供了两种方法来创建Model模型,也就是创建类 方法一: Ext.define('person',{ extend:'Ext.data.Model'     //必须继承类 fields:[ {name:'name',type:'auto'}, {name:'age',type:'int'}, {name:'email',type:'auto'}, ] }); 方法二: Ext.regModel('person',{ fields:[ {name:'n

(转)MVC 3 数据验证 Model Validation 详解

继续我们前面所说的知识点进行下一个知识点的分析,这一次我们来说明一下数据验证.其实这是个很容易理解并掌握的地方,但是这会浪费大家狠多的时间,所以我来总结整理一下,节约一下大家宝贵的时间. 在MVC 3中 数据验证,已经应用的非常普遍,我们在web form时代需要在View端通过js来验证每个需要验证的控件值,并且这种验证的可用性很低.但是来到了MVC 新时代,我们可以通过MVC提供的数据验证Attribute来进行我们的数据验证.并且MVC 提供了客户端和服务器端 双层的验证,只有我们禁用了客

ThinkPHP中视图模型详解.

很多TP的新手对于模型中的视图模型不甚了解,官方虽然有详细手册,但是对于初学者来说还是比较难以理解! 先简单说一下视图模型所能实现的功能,基本就是主表与副表之间各个字段的关联问题,实现多表关联查询,相对于使用原生SQL语句来说,着实是简单不少. 首先在数据表初始化的时候,用的不是传统的M('User'),在视图模型中使用的是D('UserView'),如下图: 需要主要的是几个单词的首字母大写. 之后在Lib/Model目录中新建名为XXXViewModel.class.php(XXX为任意控制

&lt;转&gt;ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解

MVC 3 数据验证 Model Validation 详解 在MVC 3中 数据验证,已经应用的非常普遍,我们在web form时代需要在View端通过js来验证每个需要验证的控件值,并且这种验证的可用性很低.但是来到了MVC 新时代,我们可以通过MVC提供的数据验证Attribute来进行我们的数据验证.并且MVC 提供了客户端和服务器端 双层的验证,只有我们禁用了客户端js以后,也会执行服务端验证,所以大大提高了我们的开发进度.今天我们就一起以一个初学者的身份来进入数据验证的殿堂. 首先,

Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程

上一篇文章主要讲述了Android的TouchEvent的分发过程,其中有两个重要的函数:onInterceptTouchEvent和onTouchEvent,这两个函数可被重装以完成特定的逻辑.onInterceptTouchEvent的定义为于ViewGroup中,默认返回值为false,表示不拦截TouchEvent.onTouchEvent的定义位于View中,当ViewGroup要调用onTouchEvent时,会利用super.onTouchEvent.ViewGroup调用onTo