原文:http://www.sencha.com/blog/infinite-grid-scrolling-in-ext-js-4/

Grid是在Web浏览器上显示大量表格数据的好方式。基本上,ExtJS 4的GridPanel就是一个增强的HTML表格,它可以轻松的获取、排序和过滤数据,而且不限数量。在版本4,我们重构了Grid,以挑战以前的假设和解锁一些激动人心的新特性和功能。今天,我们要看看如何将这些功能结合起来,从而使我们的应用的更强大和更灵活。

新的Grid中最令人兴奋的一点就是它能够处理大量数据而不无须分页处理。在以前的版本中,所有的数据都会立即被渲染,直到行数超出了浏览器的内存限制。还有一种方法是使用分页,一次只显示单个页面的数据,但这通常不是用户的最佳选择。

为了实现显示无限数据,但无须使用分页,在ExtJS 4,我们开发了一套新的虚拟滚动系统。新系统在你滚动的时候,会无缝的切换数据,一次只渲染少量的行。不像其它无限滚动的解决方案,我们可以简单的回收存在的行和替换它们的值,有点类似每一行都正在被重新渲染。这提供了两大好处,一是能够实现可变行高,二是可以随时折叠和展开每一行。

创建无限制的Grid

现在让我们开始创建我们的无限制滚动的Grid。当然,首先要做的就是准备一个数据集,因此,在这个示例中,我们将使用ExtJS论坛帖子作为我们的数据。首先,我们要建立一个模型,它表示一个论坛的主题:

Ext . define ( ' Thread ' ,   {
    extend :   ' Ext . data . Model ' ,
 
    idProperty :   ' threadid ' ,
    fields :   [
        ' threadid ' ,   ' title ' ,   ' forumtitle ' ,   ' forumid ' ,   ' author ' ,   ' lastposter ' ,   ' excerpt ' ,   ' replycount ' ,
        { name :   ' lastpost ' ,   type :   ' date ' ,   dateFormat :   ' timestamp ' }
    ]
} ) ;

大多数字段可以简单的只指定名称,系统会自动将其类型设置为自动类型。特殊的地方是lastpost,需要设置dateFormat属性,以让其可以正确处理服务器端返回的日期值。现在,已经有了一个论坛主题模型的定义,可以使用Store让它从论坛返回数据:

var   store   =   Ext . create ( ' Ext . data . Store ' ,   {
    model :   ' Thread ' ,
    pageSize :   200 ,
    autoLoad :   true ,
 
    remoteSort :   true ,
    sorters :   {
        property :   ' lastpost ' ,
        direction :   ' DESC '
10      } ,
11   
12      proxy :   {
13          type :   ' scripttag ' ,
14          url :   ' http : // www.sencha.com/forum/remote_topics/index.php',
15          extraParams :   {
16              total :   50000
17          } ,
18          reader :   {
19              type :   ' json ' ,
20              root :   ' topics ' ,
21              totalProperty :   ' totalCount '
22          } ,
23          simpleSortMode :   true
24      }
25  } ) ;

在这里,使用了几个Store的配置。我们定义了的ScriptTagProxy,它将使用JSON-P加载数据,也就是会使用JSONReader去处理返回的数据,其中的extraParams属性将高速服务器返回50000条数据。我们还定义了pageSize属性让服务器,从而让服务器每次只返回200条数据。

当用户通过滚动条滚动数据时,无限制滚动Grid将使用这些配置以数据块的形式去下载200条数据,这处理将在当用户操作到接近当前数据的边界时发生,例如,当前加载了200条记录,当用户滚动到大约150个记录时,Grid会去加载下一个数据块。

现在,已经创建了模型和Store,最后的工作就是创建Grid了。这和创建其它的Grid没什么不同,唯一的区别就是需要使用paginggridscroller组件:

Ext . create ( ' Ext . grid . GridPanel ' ,   {
    width :   700 ,
    height :   500 ,
    renderTo :   Ext . getBody ( ) ,
    store :   store ,
 
    verticalScroller :   {
        xtype :   ' paginggridscroller '
    } ,
10   
11      columns :   [
12          {
13              xtype :   ' rownumberer ' ,
14              width :   40 ,
15              sortable :   false
16          } ,
17          {
18              text :   " Topic " ,
19              dataIndex :   ' title ' ,
20              flex :   1
21          } ,
22          {
23              text :   " Replies " ,
24              dataIndex :   ' replycount ' ,
25              align :   ' center ' ,
26              width :   70
27          } ,
28          {
29              text :   " Last   Post " ,
30              dataIndex :   ' lastpost ' ,
31              width :   130 ,
32              renderer :   Ext . util . Format . dateRenderer ( ' n / j / Y   g : i   A ' )
33          }
34      ]
35  } ) ;

在浏览器打开页面将看到以下结果:

这看起来和普通的Grid没什么不同,不过,你一旦开始滚动,你会发现他可持续滚动下去但没有分页。无限制Grid在ExtJS 4是一个很棒的新技术。它给用户提供了一个很好的体验,再也不用担心那一页是用户想看到的,同时无限制Grid还为维护企业规模的数据提供了高扩展性的解决方案。

作者:Ed Spencer

Ed Spencer leads the development of Ext JS and supporting projects. An expert with Ext JS and JavaScript in general and with several years experience with traditional server side frameworks, he has broad experience in API design and delivery. His passion is in crafting beautiful code that supports the world-class Sencha product line.

转载于:https://www.cnblogs.com/wdpp/archive/2011/05/11/2386484.html

ExtJS 4无限制滚动条的Grid相关推荐

  1. extjs5的grid垂直滚动条bug_Extjs grid panel 滚动条失效的解决方法

    之前用EXTJS的gridPanel组件的时候,因为经常对gridPanel中的stroe数据进行过滤,所以有时候总是导致gridPanel自身所带的scrollbar失效. 取个实例,EXTJS g ...

  2. 用ExtJs+Linq+Wcf打造简单grid

    本系列文章列表 1)Ajax访问Xml Web Service的安全问题以及解决方案 2)Ajax与WCF交互-WCF之美 3) Ajax与Wcf交互-JSON 4) ExtJs与WCF交互:生成树 ...

  3. Extjs入门(07) 滚动条autoScroll:true,

    这是extjs滚动条 autoScroll:true,//Extjs滚动条 用法: 例如1: Ext.extend(phis.application.war.script.WardPatientFor ...

  4. Kendo UI Grid 样式改变控制

    目录 一. 单元格颜色控制 1. 改变单元格背景颜色 2. 改变单元格边框 3. 改变行背景色 二. 单元格内容控制 1. 单元格换行控制 a. css控制不换行 b. JS控制指定换行 2. 表格以 ...

  5. java修改hidden_Java ColumnConfig.setHidden方法代码示例

    import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; //导入方法依赖的package包/类 @Override public Column ...

  6. CMS之图片管理(2)

    先来完成树目录的显示.开始前,现在解决方案中创建一个Upload目录用来存放上传的图片,为了便于测试,在Upload目录下随便添加两个目录,这里添加1和2. 好,现在创建一个名为FolderContr ...

  7. Python GUI设计 tkinter 笔记

    # <Python GUI设计 tkinter菜鸟编程>学习笔记,可直接执行代码 # 排版混乱,可设置Tab缩进为2个空格查看 # 此处整个笔记为python程序,可直接运,生成各类GUI ...

  8. Amcharts--Chart with scroller

    Chart with scroller 官网事例:http://www.amcharts.com/line/chart-with-scroller/ amcharts可以用来做成漂亮的flash报表, ...

  9. 神经网络与深度学习笔记汇总五

    神经网络与深度学习笔记汇总五 往期回顾 将之前掘金写的学习笔记所遇困难搬到这里,方便查看复习 遇到问题: 报错 (未解决) 学习内容: 1.报错operand should contain 1 col ...

最新文章

  1. ios 接收 c# socket udp 组播
  2. Spring Boot定时任务应用实践
  3. go-ethereum-code-analysis 以太坊源码分析
  4. mysql与orancl_清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦
  5. XML Schema 配置文件自动生成c#类设计案例子
  6. shell编程入门步步高(九、sed和awk)
  7. mysql 内存表 速度_mysql查询速度。为什么用内存表查询tmp表比直接选择慢?
  8. mysql数据库修改结构_Mysql 数据库之修改标的结构
  9. 自制小型USB TO TTL串口工具
  10. VisualSVN 破解方法
  11. [python][pandas]pandas数据处理+直方图绘制
  12. 高精度乘法———列表法
  13. 计算机网研究课题,中学生计算机类课题研究范例
  14. 10000电信固话如何设置呼叫转移
  15. 基于机器学习算法的LTE高投诉小区预判方法
  16. 金九银十,测试思维面试题最新整理!
  17. 机器学习所需要的高数知识
  18. 【商品架构day2】一个商品的领域模型长什么样子 - 淘宝十多年前的认知
  19. MapReduce的核心资料索引 [转]
  20. 1032 挖掘机技术哪家强 (20 分)

热门文章

  1. fastrtext︱R语言使用facebook的fasttext快速文本分类算法
  2. 转︱机器学习算法线上部署方法
  3. iOS 协议 委托 代理 delegate
  4. 一起来学Masonry (一)
  5. 2014 北京区域赛 dp
  6. 应用定性数据分析包RQDA(Qualitative Data Analysis)和文挖掘框架包tm结合进行文本挖掘
  7. ECMAScript 2021 特性
  8. 服务器中文档存储在哪,云服务器存储在哪
  9. mysql自动化巡检_mysql自动化巡检脚本生成html报告
  10. 【机器人】关于驱动器与控制器的工作机制