SlideShare a Scribd company logo
1 of 29
Tangram Grid 控件介绍及分享



   Tangram Grid is the grid you need!



                 阳衡锋
大纲
初衷

•目前的表格控件功能不理想
  •功能强大的非常臃肿 (eg.jggrid)
  •功能一般的难以满足个性化需求

•基于 Tangram 的 Grid 控件不多,而且功能比较
简单

•在后台系统中 Grid 控件用的最频繁
                               
                          原 因了
                      有 个人
                   当然也
之前的 Grid/UI 项目


                 功能多, javascript 变得很
                 庞大。但实际用的不多



                 UI 控件库,模块化,控件的关
                 联,因为没时间夭折
Tangram Grid!

     功能强大
     !
     32K(YUI compressed) 自带插件 9
     个 展性强
     扩             适应性强,无侵入性


     Tangram baseUI


     主流浏览器兼容 , 包括
     IE6

                         git 开源
     功能模块化
基本功能 = 你想到的功能 +↓

 •基本的表格数据展现,提供方法将 json 数据加载到 grid
 中
 •宽度自适应 , 设置表格宽度 / 高度 高度自适应高度 , 自
 动拉伸,也可以设置最小高度
 •ajax 请求数据数据 , 分页,支持集成自定义分页控件,
 能适应不同的 ajax 请求数据
 •表格单元格格式自定义,转换器,支持 checkbox 列
 •Ajax 请求时支持遮罩,也可以自定义遮罩
 •点击列头字段排序
 •基本事件绑定 , 行选择, hover , 点击
 •新增行 / 修改行 / 删除行
 •列宽可以拖动
 •列头分组
功能列表 - 插件功能 ,还有

 •行可以通过拖放改变顺序
 •列可以通过拖放改变顺序
 •可编辑表格,支持常见的编辑类型,文本框,下拉框等,
 支持自定义编辑。
 •子表格,点击某单元格出现一块区域显示子数据,可以是
 表格,也可以是自定义内容
 •冻结列,列比较多的时候出现横向滚动条,可以冻结左边
 的 n 列,这些列不随横向滚动条滚动
 •数据显示的分组,统计,以及扩展机制,主要是扩展统计
 方法,支持从 ajax 请求结果读取统计数据,也支持
 javascript 做简单统计。
 •Treegrid ,将表格的某个列显示成树形结构,并支持延迟
 加载
 •键盘事件支持,支持键盘事件,光标操作等
 •页内排序
Demo 演示
所有文件

       css 文件

       基本功能




        插件功能,
        按需引用
基本使用

1. 引入 tamgram & grid




2. 定义一个 div



3.Javascript 声明一个对象
插件使用

1. 引入插件 js




2.Javascript 声明对象时设置插件属性 ( 插件属性相见文档 )




                                                  调   用
                                            提 供方法
                                        会
                                 插件也
API& 事件

1.OO 方式调用方法: gridInstance.fn(parameter);
2. 初始化指定监听方法




3.. 事件监听
功能可扩展


•标准的 baseUI 控件扩展方式

•列类型自定义

•统计类型自定义
                    基 于这些
                 就是
               插件 发的
•分页控件自定义
               扩展开

•事件监听
文档很重要 !




                     !
               强哥 支持
          谢谢
github 开源

  项目地址:
  https://github.com/hafeyang/tangramgrid
  git 地址:
  git://github.com/hafeyang/tangramgrid.git
  只读 svn 地址:
  http://svn.github.com/hafeyang/tangramgrid
项目介绍

              Demos
               文档

               CSS




       源码




       压缩工具 :windows+jdk
无处不在的细节


          “   无论何时,只要涉及报告
          用形容词来描述产品(“该产品
          酷毙了”),而没有提及细节
          (如他的标题栏见识拉绒铝的
          颜色,所有的图标带有一点反
          光,好像被放在三角钢琴上一
          样),那么你就知道你麻烦了
          。

                 -- 软件随想录 P97
宽度自适应

容器宽度发生变化,表格的宽度也要变化




                         IE6 必须指定宽度且
                         position:relative; 才能
内容溢出同样需要显示滚动条            支持 overflow:hidden

resize/setSize 方法调整 / 设置大小
但是表格 table-layout:fixed 需要指定宽度
列宽自适应

有一列的宽度能填充所有剩下宽度




          fix:true 表示该列的宽度是
          表格宽度减去其他列的宽度
列头 / 数据冻结

列头 table 与数据表格分开
 表头列与数据列的对齐 (webkit,table-
 layout:fixed bug)
 横向滚动条滚动,列头表格也需要滚动
 纵向滚动条会影响对齐的计算
滚动条使用单独的 div ,而不是利用容器的溢出,
有利于扩展出更多的滚动条行为
数据区的冻结, copy 一个表格的一部分
空值的显示

给表格的数据是未知的,经常会出现
null,undefined
                          0,”0” 不
将 null undefined 替换成””
                          显示?
内存泄漏问题

事件 on/un 原理 , 事件中心
关注 baidu.event._listeners.length
删除 DOM 结点,先用 un 方法取消其事件 (jQuery)
“fully disposable”
   DOM 操作频繁
   尤其是数据加载会重新加载
baseUI 中 addEventListener/removeEventListener 的设计
以及 dispose 实现。
重新 render?
原型 ?实例 ?

原型意味着每个实例都能访问到原型中的属性。
不可以将 DOM 引用放在原型中
 g.ref 存放 DOM 引用
 如果将 ref 扩展到 prototype 上,当页面出现多
 个 grid 实例时, ref 访问不到各自实例的 DOM 引
 用。
 _clearBindings 方法删除 DOM ref
why 插件 ?

非常用功能使用插件实现
设计本身扩展性挑战
减小 js 大小
插件对基本功能的依赖。
理论:模块化 , 松耦合
表格事件的绑定 ,使用冒泡

不需要每次加载 table 后再绑定事件 ,table 的事件
都是通过冒泡通过容器监听的。
事实上 table DOM 的操作耗时和添加事件监听耗时
是一个数量级。
冒泡事件监听有效的提升了性能。
baseUI 的 getCallRef/ getCallString 的利弊
拖放行为 / 行拖动 / 列拖动的实现




跨级   原位置区域,无效   有效区
无效
treegrid 实现

使用时需要配置什么?
怎样将列表型数组解析成一个树形结构 ?
树节点的展现 ?
新增 / 修改 / 删除节点 ?
别忘了。它只是一个插件
保持 API 的稳定

berg:

http://www.baiduux.com/blog/2011/06/21/javs
cript-api-compatible/
谢绝直接访问 grid 内部 DOM 。
提供 cellIterator 用于表格内部 DOM 访问
走在用户的前面

  谢谢 !

More Related Content

Similar to Tangramgrid

美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
编辑器设计2
编辑器设计2编辑器设计2
编辑器设计2yiming he
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editortaobao.com
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)Will Huang
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0Anthony Chen
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Designjay li
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考greengnn
 
京东实时消息队列JDQ技术实践与探索
京东实时消息队列JDQ技术实践与探索京东实时消息队列JDQ技术实践与探索
京东实时消息队列JDQ技术实践与探索confluent
 
KISSY Editor Design 2
KISSY Editor Design 2KISSY Editor Design 2
KISSY Editor Design 2yiming he
 
张勇 搜搜前端架构
张勇 搜搜前端架构张勇 搜搜前端架构
张勇 搜搜前端架构isnull
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析CC
 
新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum锐 张
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构drewz lin
 
百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化tiantianli
 
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture][Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]思念 青青
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践LC2009
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping ToolSouyi Yang
 

Similar to Tangramgrid (20)

美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
编辑器设计2
编辑器设计2编辑器设计2
编辑器设计2
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editor
 
Win dbg入门
Win dbg入门Win dbg入门
Win dbg入门
 
Windbg入门
Windbg入门Windbg入门
Windbg入门
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考
 
京东实时消息队列JDQ技术实践与探索
京东实时消息队列JDQ技术实践与探索京东实时消息队列JDQ技术实践与探索
京东实时消息队列JDQ技术实践与探索
 
KISSY Editor Design 2
KISSY Editor Design 2KISSY Editor Design 2
KISSY Editor Design 2
 
张勇 搜搜前端架构
张勇 搜搜前端架构张勇 搜搜前端架构
张勇 搜搜前端架构
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
 
新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构
 
百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化
 
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture][Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping Tool
 

Tangramgrid