原创:GridView组件(二):设计思路

GridView组件(二):设计思路

上期回顾:http://www.cnblogs.com/beiou/p/4113327.html

1、页面结构:

gridview表格本生是可以只用一个table来渲染的。

但是为了结构清晰,便于维护,同时需实现table自行滚动且横向滚动colHead,分为四块:

(1)colHead列头Panel

(2)table数据Panel

(3)page分页Panel

(4)Drag拖拽线Panel覆盖在colHeadPanel与tablePanel之上。

2、对象设计

统一入口GridView:

每次初始化时就会创建所有Panel,并且根据配置初始化GridControl定义的对象

  1 GridView.prototype = {
  2         init: function () {
  3             this.target.html("");
  4         },initialize: function () {
  5             this.setOptions();
  6             this.bindEvent();
  7         },setOptions: function () {
  8             $.extend(this,{
  9                 _colHeadPanel:$("<div class=\"grid_colHead\"></div>"),
 10                 _dragPanel:$("<div class=\"grid_drag\"></div>"),
 11                 _tablePanel:$("<div class=\"grid_table\"></div>"),
 12                 _otherPanel:$("<div class=\"grid_other\"></div>"),
 13                 _pagePanel:$("<div class=\"grid_page\"></div>"),
 14                 _sortName:null,
 15                 _sortOrder:null,
 16                 colHead:null,
 17                 drag:null,
 18                 table:null,
 19                 page:null
 20             });
 21             if(this.opts.width == null){
 22                 this.target.css("width",this.target.parent().width());
 23                 GridTargetList.push(this.target);
 24             }
 25             this.target.addClass("gridview").append(this._colHeadPanel).append(this._dragPanel)
 26                 .append(this._tablePanel).append(this._otherPanel);
 27             this.formatTempalteModule();
 28             this.formatColModule();
 29             this.colHead = new GridControl.ColHeadControl({
 30                 panel:this._colHeadPanel,
 31                 colHead:this.opts.colHead,
 32                 colModule:this.opts.colModule,
 33                 templateWidth:this.templateWidth,
 34                 isTemplate:this.isTemplate,
 35                 isCheckBox:this.opts.isCheckBox,
 36                 isSort:this.opts.isSort,
 37                 isNumber:this.opts.isNumber,
 38                 isLeftTemplate:this.opts.isLeftTemplate,
 39                 otherColNumber:this.otherColNumber
 40             });
 41             if(this.opts.isDrag){
 42                 this.drag = new GridControl.DragControl({
 43                     panel:this._dragPanel,
 44                     colModule:this.opts.colModule,
 45                     height:this.opts.height + this._colHeadPanel.height(),
 46                     templateWidth:this.templateWidth,
 47                     isTemplate:this.isTemplate,
 48                     isCheckBox:this.opts.isCheckBox,
 49                     isNumber:this.opts.isNumber,
 50                     isLeftTemplate:this.opts.isLeftTemplate,
 51                     otherColNumber:this.otherColNumber
 52                 });
 53             }
 54             this.table = new GridControl.TableControl({
 55                 panel:this._tablePanel,
 56                 colModule:this.opts.colModule,
 57                 rowAddModule:this.opts.rowAddModule,
 58                 data:this.opts.datasource,
 59                 height:this.opts.height,
 60                 templateModule:this.opts.templateModule,
 61                 templateWidth:this.templateWidth,
 62                 isTemplate:this.isTemplate,
 63                 isCheckBox:this.opts.isCheckBox,
 64                 isNumber:this.opts.isNumber,
 65                 isLeftTemplate:this.opts.isLeftTemplate,
 66                 otherColNumber:this.otherColNumber,
 67                 onDetail:this.opts.onDetail,
 68                 onDoubleClick:this.opts.onDoubleClick,
 69                 onClick:this.opts.onClick,
 70                 onCheck:this.opts.onCheck
 71             });
 72             if(this.opts.pageModule){
 73                 if(this.opts.pageModule.panel != null && this.opts.pageModule.panel.length > 0){
 74                     this.opts.pageModule.panel.append(this._pagePanel);
 75                 }else{
 76                     if(this.opts.pageModule.isTop){
 77                         this._pagePanel.insertBefore(this._colHeadPanel);
 78                     }else{
 79                         this.target.append(this._pagePanel);
 80                     }
 81                 }
 82                 this.page = this._pagePanel.GridPage({
 83                     total: this.opts.pageModule.total,
 84                     index: this.opts.pageModule.index,
 85                     pageNum: this.opts.pageModule.pageNum,
 86                     pageRate: this.opts.pageModule.pageRate,
 87                     onChange:this.opts.pageModule.onChange,
 88                     onSetNum:this.opts.pageModule.onSetNum,
 89                     type:this.opts.pageModule.type
 90                 });
 91             }
 92             this.other = new GridControl.OhterControl({
 93                 panel:this._otherPanel,
 94                 isTemplate:this.isTemplate,
 95                 isCheckBox:this.opts.isCheckBox,
 96                 isNumber:this.opts.isNumber,
 97                 templateWidth:this.templateWidth,
 98                 colModule:this.opts.colModule,
 99                 otherColNumber:this.otherColNumber
100             })
101             this.setWidth();
102         }
103 };

时间原因先更新到这里,未完待续…

时间: 2024-11-07 14:36:49

原创:GridView组件(二):设计思路的相关文章

(原)IOS之Metro实现,拥有windows磁帖效果(二 设计思路)

(原)IOS之Metro实现,拥有windows磁帖效果(二 设计思路) 在上一篇博客(IOS之Metro实现,拥有windows磁帖效果(一 动画效果的实现)中主要阐述了动画内容.这篇主要阐述功能的设计. 所有转出博客园,请您注明原文出处:http://www.cnblogs.com/xiaobajiu/p/4106663.html 考虑到metro控件的功能主要属性如下: 1.提供当前是否正在动画的属性.当metro正在动画的时候我们可以选择性的不去响应一些事件. 2.提供当前是否在动画事件

angular1常用组件和服务的设计思路

每个Angular“应用程序”ng-app都有一个 injector ,负责创建并查找依赖,当缓存中没有依赖key1时,记依赖对象为{key1:null,key2:value2,...},后来当key1出现时,key1修改依赖对象为{key1:value1,key2:value2,...},所有文件加载完毕以后,执行全局配置函数config和run,如果所有文件加载完毕,key1也没有出现,则会报错,不会执行全局配置函数.一.标题组件的设计思路:1.标签内属性传参(1)标题内容2.模板(1)<i

JS表格分页组件:fupage的设计思路和具体用法(未来考虑开源,争取在2015年)

一.背景         之前在秒针工作的时候,某js高级工程师写了很多自己的组件,其中一套是分页组件,叫做st-grid.不过在我看来,bug太多,我经常给他反馈bug,我也不清楚为啥别人没有发现.    回到武汉工作后,我自己利用业余实践完善自己的官网,从前端到后端,都是自己一个人亲自搞定.    第1个分页的需求是,文章下方的评论,异步加载.第2个需求是,表格管理,比如后台管理系统,经常需要列出user.log等表的记录.   二.实例 <table class="table tab

用MongoDB数据库来管理办公系统中文档型的表单和信息——通用流程化应用审批单设计思路(二,续)

1.办公系统中文档的定义 办公系统中的文档就是指对数据不敏感的业务,例如流程中的审批单.信息专栏.数据上报.信息记录等.而对于这些信息的管理,特别是时效性较强的管理记录,仍采用关系型数据库进行管理. (1)流程中审批单 流程中审批单由功能按钮区.特殊功能区.业务表单区.附件区.审批意见区等区域构成,其中,业务表单区理论上包含附件和意见,但是由于附件和意见的业务特殊性,需要单独进行管理,剩下的业务表单就可以看作文档了. 在一些流程审批业务中,业务信息有的是以Excel或word文件等方式专递,这样

二、 面向云的.net core开发框架的主要设计思路

为满足性能.扩展性.业务快速交付等方面的要求,新.net core云开发框架改造的主要思想是:高内聚.低耦合,即进一步实现纵向和横向分层,提高可伸缩性和可扩展性,实现弹性部署: 采用领域驱动设计进行架构横向分层,同时业务功能纵向分割 在代码和数据库设计上充分考虑云架构要素,提高可伸缩性.可扩展性.高性能性和安全性 采用诸如分布式缓存.分布式存储.并行数据库.消息队列.ESB等多种可伸缩技术实现松耦合 采用上述设计思路后的新架构搭建的综合业务管理系统如下图.其中HL.HB等是外部系统,通过ESB与

TYPESDK手游聚合SDK客户端设计思路与架构之二:安卓平台统一化接口结构及思路

在上一篇<TypeSDK聚合sdk设计基本原则>中我们提到了,设计聚合sdk需要设计开发平台部分的接口,以及设计发布平台的聚合这2个大模块.那么我们今天就先来讲讲发布平台之一:安卓平台的统一化接口结构和思路. 一.相关的需求 安卓平台的统一化接口,我们需要考虑到具体以下的几点: 1.对外需要有统一的接口,保证不同的渠道sdk 对同一个游戏来说,是调用相同的接口,传递相同的参数 2.对内需要有一套扩展性很好的框架,可以应对不同渠道的sdk差异性 二.设计的模块 那么针对这些考虑点,安卓平台的统一

原创:GridView组件(三):分页组件部分

原创:GridView组件(三):分页组件部分 上期回顾:http://www.cnblogs.com/beiou/p/4274434.html 初始化部分: if(this.opts.pageModule){ if(this.opts.pageModule.panel != null && this.opts.pageModule.panel.length > 0){ this.opts.pageModule.panel.append(this._pagePanel); }else

在BPM动态可配置表单中使用NoSQL技术可行性分析——通用流程化应用审批单设计思路(二)

原业务流程平台审批单使用横向表纵向存储的思路,所有流程所使用的业务表单的数据都存在一张物理表中,表中每条数据记录包含Column定义和Value,Column所对应的字段信息,通过定义表来定义.这种做法就是在实现时,需要使用代码进行数据组装,比较繁琐.当表单较大时,界面展现速度慢.此方案查询统计支持有限. 为了满足可配置动态表单的需求,并解决上述方案的不足,采用NoSQL技术来优化设计,因为NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式.按NoSQL的特性,可以灵活进行s

上传二维码登录设计思路

一.要求 二维码图片.账号.密码均通过其他渠道下发: 用户上传二维码,同时输入用户名和密码,输入的用户必须为二维码内的用户: 要有图片验证码,退出登录,同一用户登录后自动挤掉旧的会话: 二.思路 上传扫描成功后,返回二维码内的账号hash,登录过程带上这个hash,以保证输入账号与二维码的一致. 使用JWT方案,其中jwt中不存放任何真实用户信息,仅包含代表此次登录的loginKey,是一个随机串. 涉及三个关键缓存: CaptchaCache:缓存验证码信息,key为一个随机串,value为生